用SOCKET实现TCP通信Word格式文档下载.docx
- 文档编号:15286235
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:11
- 大小:82.33KB
用SOCKET实现TCP通信Word格式文档下载.docx
《用SOCKET实现TCP通信Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《用SOCKET实现TCP通信Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
在MS-DOS、WindowsOS、OS/2等操作系统中,socketAPI是以程序库形式提供的,如在Windows系统中,socketAPI被称为Winsock。
Socket接口规范可以适用多种通讯协议,主要是TCP/IP。
TCP/IP是计算机互联最常适用的网络通讯协议,TCP/IP的核心部分由网络操作系统的内核实现,应用程序通过编程接口来访问TCP/IP,应用程序通讯的方式有图36-1所示。
TCP/IP使用一个网络地址和一个服务端口号来惟一地标识设备。
网络地址标识网络上的特定设备;
端口号标识要连接到的该设备上的特定服务。
网络通讯的基本模式如下:
每一台通讯的主机都有一个本网络环境中惟一的IP地址,一台主机上往往有多个通讯程序存在,每个这样的程序都要占用一个通讯端口。
因此,一个IP地址,一个通讯端口,就能确定一个通讯程序的位置。
2.基于C的Socket编程相关函数和数据类型
1.sockadd和sockaddr_in结构:
①sockaddr结构
structsockaddr
{
unsignedshortsa_family;
/*地址族,AF_xxx有IPV4与IPV6等*/
charsa_data[14];
/*14字节的协议地址*/
};
sa_family一般为AF_INET,表示Internet协议族,如是AF_UNIX表示UNIX协
议簇;
sa_data中包含该socket的IP地址和端口号。
②in_add结构,用来存储四字节的IP地址
structin_addr{
unsignedlongs_addr;
③sockaddr_in结构
structsockaddr_in
shortintsin_family;
/*地址族*/
unsignedshortintsin_port;
/*端口号*/
structin_addsin_addr;
/*IP地址*/
unsignedcharsin_zero[8];
/*填充0以保持与structsockaddr同样大小*/
};
该结构中sin_zero使得sockaddr和sockaddr_in指针类型相互转换;
sin_port和sin_addr必须是网络字节顺序,因为它们被封装在包的IP和UDP层,而sin_family不发送到网络上可以是本机字节顺序。
相关函数
1.socket()函数
该函数用于根指定的地址族、数据类型和协议来分配一个套接字的描述字及其所用的资源。
Socket函数原型为:
intsocket(intdomain,inttype,intprotocol);
a、参数domain指定地址描述,一般为AP_INET;
b、参数type指定socket类型:
SOCK_STREAM和SOCK_DGRAM;
c、参数protocol通常为0;
d、函数返回值为一个整型socket描述符,在bind函数中调用。
2.bind()函数
该函数用于将一个本地地址与一个套接字绑定在一起。
intbind(intsockfd,structsockadd*my_addr,intaddrlen);
a、sockfd:
socket描述符,使用socket函数返回值,将该socket与本机上的一个端口相关联。
在设计服务器端程序是需要调用bind函数,以在该端口上监听服务请求;
而客户端一般不需要调用bind函数,因为只需知道服务器IP地址,并不关心客户通过哪个端口与服务器建立连接,内核会自动选择一个未被占用的端口供客户端来使用。
b、my_addr:
指向包含本机IP地址及端口号等信息的sockaddr类型的指针。
c、addrlen:
sizeof(structsockaddr)的值。
d、bind函数返回值:
为-1表示遇到错误,并且errno中包含相应的错误码。
3.connect()函数与远程服务器建立一个TCP连接。
intconnect(intsockfd,structsockaddr*serv_addr,intaddrlen);
目的服务器的socket描述符。
b、serv_addr:
指向包含目的服务器的IP地址及端口号的指针。
d、connect函数返回值:
为-1表示遇到错误,并且errno中包含相应的错误码,进行服务器端程序设计时不需调用connect函数。
4.listen()函数
在服务器端程序中,当socket与某一端口绑定后,需要监听该端口,及时处理到达该端口上的服务请求。
intlisten(intsockfd,intbacklog);
Socket系统调用返回的socket描述符。
b、backlog:
指定在请求队列中允许的最大请求数,进入的连接请求将在队列中等待接收backlog限制了队列中等待服务的请求数目,系统缺省值为20。
c、listen函数返回值:
5.accept()函数
当某个客户端试图与服务器监听的端口连接时,该连接请求将排队等待服务器用
accept接收它并为其建立一个连接。
intaccept(intsockfd,structsockaddr*addr,int*addrlen);
被监听的socket描述符。
b、addr:
sockaddr类型的指针变量,用来存放提出连接请求服务的主机信息。
c、accept函数返回值:
为-1表示遇到错误,并且errno中包含相应的错误码,如果没有错误,accept()函数返回一个新想socket描述符,供这个新连接来实用,而服务器可以继续在以前的socket上监听,同时可以在新的socket描述符上进行数据发送和数据接收(sent()和recv()操作)。
6.sent()和recv()函数
用于在面向连接(TCP)的socket上进行数据传输。
send()函数原型:
intsend(intsockfd,constvoid*msg,intlen,intflags);
用于传输数据的socket描述符。
b、msg:
是一个指向要发送数据的指针。
c、len:
以字节为单位的数据的长度。
d、flags:
一般情况下置为0。
e、函数返回值:
为-1表示遇到错误,并且errno中包含相应的错误码,否则返回所发送数据的总数,该数字可能小于len中所规定的大小。
recv()函数原型:
intrecv(intsockfd,void*buf,intlen,unsignedintflags);
是接收数据的socket描述符。
b、buf:
是存放接收数据的缓冲区。
以字节为单位的缓冲区的长度。
为-1表示遇到错误,并且errno中包含相应的错误码,无错则返回读入的字节数,如果连接被中止,返回0。
8.close()和shutdown()函数
当所有的数据操作结束后,可以调用close函数来释放该socket资源,从而停止在该socket上的任何数据操作。
也可以调用shutdown函数,允许只停止在某个方向上的数据传输,而另一个方向上的数据传输继续进行。
例如可以关闭某一个socket上的写操作uo允许继续在该socket上接收数据,直到读入所有数据。
但是,shutdown函数并不关闭套接字所占用的所有资源,除非调用close函数来释放。
看看两个函数原型:
close(intsockfd);
shutdown(intsockfd,inthow);
how参数的值和含义:
0:
不允许继续接收数据;
1:
不允许继续发送数据;
2:
不允许继续发送和接收数据。
shutdown在操作成功时返回0,错误时返回-1,并置errno值。
9.字节顺序转换函数
htons():
HosttoNetworkShort的缩写,该函数将主机的无符合短整型数字节顺序转换成网络字节顺序。
htonl():
HosttoNetworkLong的缩写,该函数将主机的无符合长整型数字节顺序转换成网络字节顺序。
ntohs():
NetworktoHostShort的缩写,该函数将无符号短整型数从网络字节顺序转换为主机字节顺序。
ntohl():
NetworktoHostlong的缩写,该函数将无符号长整型数从网络字节顺序转换为主机字节顺序。
三、实验内容及步骤
1.实验内容
关于UDP的介绍可以参见教科书。
传输控制协议(TransportControlProtocol)是一种面向连接的,可靠的传输层协议。
面向连接是指一次正常的TCP传输需要通过在TCP客户端和TCP服务端建立特定的虚电路连接来完成,该过程通常被称为“三次握手”。
可靠性可以通过很多种方法来提供保证,在这里我们关心的是数据序列和确认。
TCP通过数据分段(Segment)中的序列号保证所有传输的数据可以在远端按照正常的次序进行重组,而且通过确认保证数据传输的完整性。
要通过TCP传输数据,必须在两端主机之间建立连接。
举例说明,TCP客户端需要和TCP服务端建立连接,过程如图12-1所示。
第一步中,客户端向服务端提出连接请求。
这时TCPSYN标志置位。
客户端告诉服务端序列号区域合法,需要检查。
客户端在TCP报头的序列号区中插入自己的ISN。
服务端收到该TCP分段后,在第二步以自己的ISN回应(SYN标志置位),同时确认收到客户端的第一个TCP分段(ACK标志置位)。
在第三步中,客户端确认收到服务端的ISN(ACK标志置位)。
到此为止建立完整的TCP连接,开始全双工模式的数据传输过程。
根据以上内容编写一个TCPClient/Ser
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SOCKET 实现 TCP 通信