- 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编程思路
计算机网络讲义 Socket编程——第3次上机作业 本教案不属于考试内容,仅是上机作业的辅导资料 TCP层的作用 TCP层使高层用户看见的好象就在两个传输层实体之间有一条端到端的、可靠的、全双工的通信通路(即数字管道) 伯克利套接字(TCP)(Berkeley Sockets) MSDN中各原语对应的API函数原型 socket()函数——对应SOCKET原语 SOCKET socket( int af, // 地址家族说明,一般=AF_INET int type, // 类型说明:TCP或UDP int protocol // 协议,一般=IPPROTO_TCP ); // 返回值一个套接字句柄,或无效值INVALID_SOCKET recv()函数——对应RECEIVE原语 int recv( SOCKET s, // 套接字句柄 char FAR *buf, // 接收缓冲区地址 int len, // 接收缓冲区长度 int flags // 标记,说明调用的方式,0表示阻塞调用 ); // 返回实际接收到的字节数 MSDN中各原语对应的API函数原型 closesocket()函数——对应CLOSE原语 int closesocket( SOCKET s //套接字句柄 ); // 返回是否成功执行 …… MSDN中各API相关数据结构 struct sockaddr_in:套接字信息 struct sockaddr_in { short sin_family; // 地址家族,常=AF_INET u_short sin_port; // 端口号 struct in_addr sin_addr; // IP地址 char sin_zero[8]; // 填充字段 }; struct in_addr:IP地址 struct in_addr { union { struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; struct { u_short s_w1,s_w2; } S_un_w; u_long S_addr; } S_un; #define s_addr S_un.S_add /*以4字节的长字的方式来存取 */ SOCKET:套接字句柄 typedef u_int SOCKET; /* 无符号整数 */ Little-endian、Big-endian字节序 多字节数两种机内表示模式 Little-endian,字节按低位在左的顺序表示,在Intel CPU中采用。 Big-endian,字节按高位在左的顺序,在Internet的TCP/IP中所采。 套接字应用过程(单线程) 服务模式 一对一模式(一个服务器服务一个客户) 以上程序由采用的是单线程(进程)模式,一个服务器只能为一个客户服务。 一对多模式(一个服务器服务多个客户) 实际上Web Server、FTP Server都是一个服务器可以为多个客户服务(这些客户连接的套接字是同一个)。 为实现一对多模式必须对服务方采用多线程或多进程模式。 Linux常采用多进程的方式;而在Windows下常采用多线程的方式。 套接字应用过程(多线程) 单线程接收者图形化界面方案 发送者图形化界面方案 多线程接收者图形化界面方案 伯克利套接字(UDP)(Berkeley Sockets) UDP套接字应用过程(UDP单播) 伯克利套接字(UDP 多播)(Berkeley Sockets) UDP多播主要依赖于两个方面: UDP的Datagram方式 D类IP地址 D类IP地址 D类IP地址范围在-55。 它分为两类:永久地址和临时地址。 D类IP地址 永久地址 永久地址是为特殊用途而保留的。 比如,根本没有使用(也不能使用),代表子网内的所有系统(主机),而代表子网内的所有路由器。 临时组地址 临时组地址在使用前必须先创建,一个进程可以要求其主机加入特定的组,它也能要求其主机脱离该组。当主机上的最后一个进程脱离某个组后,该组地址就不再在这台主机中出现。 Winsock多播库 Windows提供提供了实现多播通信的API库WinSock 。针对IP多播,WinSock提供了两种不同的实现方法, 第一种方法是WinSock1提供的,要求通过套接字选项来加入一个组; 另一种方法是WinSock2提供的,它是引入一个新函数,专门负责多播组的加入,这个函数便是WS
文档评论(0)