linux socket 编程入门

linux socket 编程入门

ID:13556648

大小:61.50 KB

页数:10页

时间:2018-07-23

linux socket 编程入门_第1页
linux socket 编程入门_第2页
linux socket 编程入门_第3页
linux socket 编程入门_第4页
linux socket 编程入门_第5页
资源描述:

《linux socket 编程入门》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linuxsocket-编程入门(TCPserver端)通常,socket编程总是Client/Server形式的,因为有了telnet,先不考虑client的程序,先写一个支持TCP协议的server端,然后用telnet作为client验证我们的程序。TCPserver端的基本流程        想象你自己是个小大佬,坐办公室(什么样的黑社会做办公室啊?可能是讨债公司吧^^)你很土,只有一个小弟帮你接电话(因为你自己的号码是不敢对外公开的)。一次通讯的流程大概应该是这样的:小弟那里的总机电话响了;小弟接起电话;对方说是你女朋友A妹;小弟转达说,“老大,你马子电话”

2、;你说,接过来;小弟把电话接给你;你和你女朋友聊天半小时;挂电话。        分析一下整个过程中的元素。你小弟(listenSock),你需要他来监听(listen)电话;你自己(communicationSock),实际上打电话进行交流的是你自己;你的电话号码(servAddr),否则你女朋友怎么能找到你?你女朋友的电话号码(clntAddr),这个比喻有点牵强,因为事实上你接起电话,不需要知道对方的号码也可以通话(虽然事实上你应该是知道的,你不会取消了来电显示功能吧^^),但是,难道你是只接女朋友电话从来不打过去的牛人吗?这个过程中的行为(成员函数):你小弟接

3、电话并转接给你(isAccept());你自己的通话(handleEcho())(这个行为确实比较土,只会乌鸦学舌的echo,呵呵)。 UNIX中的一切事物都是文件(everythinginUnixisafile!)  这是UNIX的基本理念之一,也是一句很好的概括。比如,很多UNIX老鸟会举出个例子来,“你看,/dev/hdc是个文件,它实际上也是我的光盘……”UNIX中的文件可以是:网络连接(networkconnection),输入输出(FIFO),管道(apipe),终端(terminal),硬盘上的实际文件,或者其它任何东东。  3个已经打开的fd,0:标准

4、输入(STDIN_FILENO);1:标准输出(STDOUT_FILENO);2:标准错误(STDERR_FILENO)。(以上宏定义在中)一个最简单的使用fd的例子,就是使用中的函数:write(1,"Hello,World!",20);,在标准输出上显示“Hello,World!”。  file和fd并非一定是一一对应的。当一个file被多个程序调用的时候,会生成相互独立的fd。这个概念可以类比于C++中的引用(eg:int&rTmp=tmp;)。socket与filedescriptor       文件是应用程序与系

5、统(包括特定硬件设备)之间的桥梁,而文件描述符就是应用程序使用这个“桥梁”的接口。在需要的时候,应用程序会向系统申请一个文件,然后将文件的描述符返回供程序使用。返回socket的文件通常被创建在/tmp或者/usr/tmp中。我们实际上不用关心这些文件,仅仅能够利用返回的socket描述符就可以了。       收件人:全体女生。地址:<一种地址描述方式>       事实上,在socket的通用address描述结构sockaddr中,正是用这样的方式来进行地址描述的:struct sockaddr {     unsigned short sa_family;  

6、   char sa_data[14]; }; sa_family可以认为是socketaddressfamily的缩写,也可能被简写成AF(AddressFamily),他就好像我们例子中那个“收件人:全体女生”一样,虽然事实上有很多AF的种类,但是我们这个教程中只用得上大名鼎鼎的internet家族AF_INET。另外的14字节是用来描述地址的。这是一种通用结构,事实上,当我们指定sa_family=AF_INET之后,sa_data的形式也就被固定了下来:最前端的2字节用于记录16位的端口,紧接着的4字节用于记录32位的IP地址,最后的8字节清空为零。这就是我们

7、实际在构造sockaddr时候用到的结构sockaddr_in(意指socketaddressinternet):struct sockaddr_in {     unsigned short sin_family;     unsigned short sin_port;     struct in_addr sin_addr;     char sin_zero[8]; }; 我想,sin_的意思,就是socket(address)internet吧,只不过把address省略掉了。sin_addr被定义成了一个结构,这个结构实际上就是:stru

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。