LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1100|回复: 6

网络编程高手请进

[复制链接]
发表于 2005-12-5 19:06:07 | 显示全部楼层 |阅读模式
在使用winsock的TCP编程时,有以下问题:  

1.使用recv接受数据时,可不可能发生这种情况:另一端连续好几次调用了send函数发了几组数据,而接受方缓冲又设的足够大,所以它一次调用recv就接受到了这些所有的数据?  

2.如果以上的答案是肯定的,那会不会出现以下情况:发送方两次调用两次send,第一次发送了100字节,第二次发送了200字节。接受方也是调用了一次recv,而且它的buf只有150,那么它是不是至接受到了100+第二次发送的前50个字节?  

3.如果是这样的话,在设计服务端-客户端的协议时,如果服务端提供很多服务,是不是就意味着,必须开不同的端口来为一个客户端提供不同的服务以避免只用一个端口时不同服务协议的数据处理的麻烦?这样的话,一台服务器似乎只能接受10000左右的客户连接(如果提供几个服务的话)
发表于 2005-12-6 01:10:38 | 显示全部楼层
建议你最好看看《TCP/IP详解》第1卷。
回复 支持 反对

使用道具 举报

发表于 2005-12-6 12:29:04 | 显示全部楼层
第一问是肯定的。第二问就需要你看看那本网络协议的“圣经”了,TCP在建立连接的过程中要协商mms的.
回复 支持 反对

使用道具 举报

发表于 2005-12-6 12:29:03 | 显示全部楼层
第一问是肯定的。第二问就需要你看看那本网络协议的“圣经”了,TCP在建立连接的过程中要协商mms的.
回复 支持 反对

使用道具 举报

发表于 2006-6-27 20:29:40 | 显示全部楼层
Post by redsonic
第一问是肯定的。第二问就需要你看看那本网络协议的“圣经”了,TCP在建立连接的过程中要协商mms的.

第二问你是指的 unp卷一?  具体章节是哪里呢?  我没注意到哪里有解决这个问题的叙述 烦请细点说说

第三问如果只用一端口收发不同长度的数据  该如何设置recv的len
回复 支持 反对

使用道具 举报

发表于 2006-6-28 11:36:46 | 显示全部楼层
不同服务肯定是要采用不同的端口的。
但是针对不同的客户端,同一个服务是可以采用相同的端口的,例如,web服务器基本都是采用80端口的,而不会管是谁在连的。
回复 支持 反对

使用道具 举报

发表于 2006-6-28 14:39:13 | 显示全部楼层
我们的 方法是设置 包开始 结束标志
比如
MHF............................MNF
以此判断 ,多了就和下一次recv的合并一下
反正只有当符合一个定义好的完整包的时候才处理
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表