欢迎来到天天文库
浏览记录
ID:16163240
大小:586.50 KB
页数:37页
时间:2018-08-08
《网络socket编程指南》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、网络socket编程指南介绍Socket编程让你沮丧吗?从manpages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用connect()前的bind()的结构而不知所措?等等…如果你了解C语言并想穿过网络编程的沼泽,如果你曾经像我一样为了调试到处寻找相关资料而不能解决问题,希望这里对你有一定的帮助。读者对象这个文档是一个指南,而不是参考书。如果你刚开始socket编程并想找一本入门书,那么你是我的读者。但这不是一本完全的socket编程书。平台和编译器 这篇文档中的大多数代码都在Linux平台PC上用GNU的gcc成
2、功编译过。而且它们在HPUX平台上用gcc也成功编译过。但是注意,并不是每个代码片段都独立测试过。先来点让你晕的吧,呵呵,坚持下去你就会柳暗花明。客户机/服务器模式在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Servermodel)。该模式的建立基于以下两点:1、非对等作用;2、通信完全是异步的。客户机/服务器模式在操作过程中采取的是主动请示方式:首先服务器方要先启动,并根据请示提供相应服务:(过程如下)1、打开一通信通道并告知本地主机,它愿意在某一个公认地址上接收客户请求。2、等待客户请求到达该端口。3、接收到重
3、复服务请求,处理该请求并发送应答信号。4、返回第二步,等待另一客户请求5、关闭服务器。客户方:1、打开一通信通道,并连接到服务器所在主机的特定端口。2、向服务器发送服务请求报文,等待并接收应答;继续提出请求……3、请求结束后关闭通信通道并终止。典型过程图1面向连接的套接字的系统调用时序图2无连接协议的套接字调用时序图3面向连接的应用程序流程图注意,客户--服务器之间可以使用SOCK_STREAM、SOCK_DGRAM或者其它(只要它们采用相同的)。一些很好的客户--服务器的例子有telnet/telnetd、ftp/ftpd和bootp/bootpd。每次
4、你使用ftp的时候,在远端都有一个ftpd为你服务。一般,在服务端只有一个服务器,它采用fork()来处理多个客户的连接。基本的程序是:服务器等待一个连接,接受(accept())连接,然后fork()一个子进程处理它。这是下面会具体讲到的。目录:1)什么是套接字?2)网络理论3)结构体4)本机转换5)IP地址和如何处理它们6)socket()函数7)bind()函数8)connect()函数9)listen()函数10)accept()函数11)send()和recv()函数12)sendto()和recvfrom()函数13)close()和shutd
5、own()函数14)getpeername()函数15)gethostname()函数16)域名服务(DNS)17)简单的服务器18)简单的客户端19)数据报套接字Socket20)阻塞21)select()--多路同步I/O22)参考资料1、什么是socket?什么是套接字? 你经常听到人们谈论着“socket”,或许你还不知道它的确切含义。现在让我告诉你:它是使用标准Unix文件描述符(filedescriptor)和其它程序通讯的方式。你也许听到一些Unix高手(hacker)这样说过:“呀,Unix中的一切就是文件!”那个家伙也许正在说到一个事实
6、:Unix程序在执行任何形式的I/O的时候,程序是在读或者写一个文件描述符。一个文件描述符只是一个和打开的文件相关联的整数。但是(注意后面的话),这个文件可能是一个网络连接,FIFO,管道,终端,磁盘上的文件或者什么其它的东西。Unix中所有的东西就是文件!所以,你想和Internet上别的程序通讯的时候,你将要使用到文件描述符。你必须理解刚才的话。现在你脑海中或许冒出这样的念头:“那么我从哪里得到网络通讯的文件描述符呢?”,这个问题无论如何我都要回答:你利用系统调用socket(),它返回套接字描述符(socketdescriptor),然后你再通过它来
7、进行send()和recv()调用。“但是...”,你可能有很大的疑惑,“如果它是个文件描述符,那么为什么不用一般调用read()和write()来进行套接字通讯?”简单的答案是:“你可以使用!”。详细的答案是:“你可以,但是使用send()和recv()让你更好的控制数据传输。”存在这样一个情况:在我们的世界上,有很多种套接字。有DARPAInternet地址(Internet套接字),本地节点的路径名(Unix套接字),CCITTX.25地址(你可以将X.25套接字完全忽略)。也许在你的Unix机器上还有其它的。1).套接字编程原理一个完整的网间通信进
8、程需要由两个进程组成,并且只能用同一种高层协议。也就是说,不可能通
此文档下载收益归作者所有