设为首页 加入收藏

TOP

套接字网络编程笔记
2014-11-24 12:11:39 来源: 作者: 【 】 浏览:0
Tags:套接字 网络编程 笔记

1.调用int send( __in SOCKET s, __in const char* buf, __in int len, __in int flags); 发出的数据包,在传送过程中,虽然顺序不会把打乱,但可能会拆分成多个包,这样,只调用一次int recv( __in SOCKET s, __out char* buf, __in int len, __in int flags); 可能不能被完整地接收。


解决的方法是,定义TCP之上的协议,即应用层协议,指示数据包长度。最简单的实现为:


2.TCP通信时,服务器用SOCKET accept( __in SOCKET s, __out struct sockaddr* addr, __inout int* addrlen); 创建的套接字共同占用一个端口,即服务器监听端口。


为什么要这么做:客服端套接字指定通信对方的端口就是监听端口,没有理由找一个使用其它端口的套接字跟它连接。


为什么能这么做:TCP报文中,包含源端口,与目标端口,再加上IP层的源IP地址及目标IP地址,这四个信息,就是运输层多路分解中,所需要的四元组,意思是可以唯一确定一个TCP连接。当从IP层,解包数据后,就可以根据四元组,找到这些数据的目标TCP连接。这点跟UDP连接是有区别的,因为UDP多路分解时只使用目标IP地址及目标端口,所以,只要目标IP为本机IP,目标端口为监听端口的,UDP连接都会定向到一个UPD连接。这意味,UDP是一个一对多的连接(确切地说UPD不能叫连接)。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux Slab分配器(七)--销毁缓存 下一篇C注释正则式及其效率思考

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Java 并发工具类:提 (2025-12-25 20:25:44)
·Java面试技巧:如何 (2025-12-25 20:25:41)
·Java并发编程中的线 (2025-12-25 20:25:38)
·C 语言 - cppreferen (2025-12-25 19:50:27)
·《C 语言入门教程》 (2025-12-25 19:50:23)