欢迎来到天天文库
浏览记录
ID:13556648
大小:61.50 KB
页数:10页
时间:2018-07-23
《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
此文档下载收益归作者所有