- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
网络socket编程,C语言版本
TCP/IP协议(Transmission Control Protocol/Internet Protocol)叫做传输控制/网际协议,又叫网络通信协议。实际上,它包含上百个功能的协议,如ICMP(互联网控制信息协议)、FTP(文件传输协议)、UDP(用户数据包协议)、ARP(地址解析协议)等。TCP负责发现传输的问题,一旦有问题就会发出重传信号,直到所有数据安全正确的传输到目的地。
套接字(socket):在网络中用来描述计算机中不同程序与其他计算机程序的通信方式。socket其实是一种特殊的IO借口,也是一种文件描述符。
套接字分为三类:
流式socket(SOCK_STREAM):流式套接字提供可靠、面向连接的通信流;它使用TCP协议,从而保证了数据传输的正确性和顺序性。w w w z h u a n g s h u k o n g j i a n. c o m
数据报socket(SOCK_DGRAM):数据报套接字定义了一种无连接的服务,数据通过相互独立的保温进行传输,是无序的,并且不保证是可靠、无差错的。它使用的数据报协议是UDP。
原始socket:原始套接字允许对底层协议如IP或ICMP进行直接访问,它功能强大但使用复杂,主要用于一些协议的开.石家庄龙发装饰 w w w l o n g f a h b .c o m
程序代码经过了优化,并且整合多线程,把接收和发送放到同一个文件中,使用参数模式调用发送和接收模块。增加了创建SOCKET的创建的时候s句柄(或对象)判断返回值是否为INVALID_SOCKET,以及socket的bind操作的返回值是否为SOCKET_ERROR,其他socket的操作应该也判断SOCKET_ERROR,以保证程序的稳定性.
套接字由三个参数构成:IP地址,端口号,传输层协议。
这三个参数用以区分不同应用程序进程间的网络通信与连接。
套接字的数据结构:C语言进行套接字编程时,常会使用到sockaddr数据类型和sockaddr_in数据类型,用于保存套接字信息。
两种结构体分别表示如下:
[cpp]? HYPERLINK /lovekun1989/article/details\o view plain view plain? HYPERLINK /lovekun1989/article/details\o copy copy
struct?sockaddr??
{??
????//地址族,2字节??
????unsigned?short?sa_family;??
????//存放地址和端口,14字节??
????char?sa_data[14];??
}??
??
struct?sockaddr_in??
{??
????//地址族??
????short?int?sin_family;??
????//端口号(使用网络字节序)??
????unsigned?short?int?sin_port;??
????//地址??
????struct?in_addr?sin_addr;??
????//8字节数组,全为0,该字节数组的作用只是为了让两种数据结构大小相同而保留的空字节??
????unsigned?char?sin_zero[8]??
}??
对于sockaddr,大部分的情况下只是用于bind,connect,recvfrom,sendto等函数的参数,指明地址信息,在一般编程中,并不对此结构体直接操作。而是用sockaddr_in来代替。
两种数据结构中,地址族都占2个字节,常见的地址族有:AF_INET,AF_INET6,AF_LOCAL。如果喜欢请电qq1410115178联系我哟
这里要注意字节序的问题,最好使用以下函数来对端口和地址进行处理:
[cpp]? HYPERLINK /lovekun1989/article/details\o view plain view plain? HYPERLINK /lovekun1989/article/details\o copy copy
uint16_t?htons(uint16_t?host16bit)?uint32_t?htonl(uint32_t?host32bit)??
uint16_t?ntohs(uint16_t?net16bit)?uint32_t?ntohs(uint32_t?net32bit)??
将主机字节序改成网络字节序。
使用socket进行TCP通信时,经常使用的函数有:
下面是TCP通信的demo:
[cpp]? HYPERLINK /lovekun19
原创力文档


文档评论(0)