BBS水木清华站∶精华区
发信人: sophie (心静如水), 信区: Unix
标 题: help for unix socket (转载)
发信站: BBS 水木清华站 (Wed Mar 8 08:38:04 2000)
【 以下文字转载自 Winsock 讨论区 】
【 原文由 sophie 所发表 】
有没有人用send(),recv()函数遇上过通信一方
实际接收到的数据个数少于另一方发送出的数据个数
这种情形?是不是除了分段发送和接收,别无它法?
谢了先!
--
※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.114.1.206]
发信人: mafie (浪人~空手进三月,offer抵万金), 信区: Unix
标 题: Re: help for unix socket (转载)
发信站: BBS 水木清华站 (Wed Mar 8 08:51:26 2000)
【 在 sophie (心静如水) 的大作中提到: 】
∶ 【 以下文字转载自 Winsock 讨论区 】
∶ 【 原文由 sophie 所发表 】
∶ 有没有人用send(),recv()函数遇上过通信一方
∶ 实际接收到的数据个数少于另一方发送出的数据个数
∶ 这种情形?是不是除了分段发送和接收,别无它法?
∶ 谢了先!
如果是TCP socket,send和recv正常返回的话,
不会出现这个问题的。
--
※ 来源:·BBS 水木清华站 smth.org·[FROM: sap1.cs.tsinghu]
发信人: sophie (心静如水), 信区: Unix
标 题: Re: help for unix socket (转载)
发信站: BBS 水木清华站 (Wed Mar 8 09:00:27 2000)
是TCP socket, 我以前也试过可以正常返回,但现在
我的server端加入了pvm的内容,启动了pvm进程,就出现
这个问题了:我试着从客户端接收200个double数,但总是
只收到182个,my God, why?害得我现在只能每次发送不
超过182个,分段才能正常接收.
我的天,哪以后我要传送更多的数据可如何是好?
【 在 mafie (浪人~空手进三月,offer抵万金) 的大作中提到: 】
∶ 如果是TCP socket,send和recv正常返回的话,
∶ 不会出现这个问题的。
--
※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.114.1.206]
发信人: mafie (浪人~空手进三月,offer抵万金), 信区: Unix
标 题: Re: help for unix socket (转载)
发信站: BBS 水木清华站 (Wed Mar 8 09:05:27 2000)
【 在 sophie (心静如水) 的大作中提到: 】
∶ 是TCP socket, 我以前也试过可以正常返回,但现在
∶ 我的server端加入了pvm的内容,启动了pvm进程,就出现
∶ 这个问题了:我试着从客户端接收200个double数,但总是
∶ 只收到182个,my God, why?害得我现在只能每次发送不
∶ 超过182个,分段才能正常接收.
∶ 我的天,哪以后我要传送更多的数据可如何是好?
收到182个之后socket的状态是什么?
pvm进程是否可以读取socket的数据,导致不正常?
--
※ 来源:·BBS 水木清华站 smth.org·[FROM: coco.cic.tsingh]
发信人: railan (雨天 - offer container), 信区: Unix
标 题: Re: help for unix socket (转载)
发信站: BBS 水木清华站 (Wed Mar 8 10:15:59 2000)
【 在 sophie (心静如水) 的大作中提到: 】
∶ 是TCP socket, 我以前也试过可以正常返回,但现在
∶ 我的server端加入了pvm的内容,启动了pvm进程,就出现
∶ 这个问题了:我试着从客户端接收200个double数,但总是
∶ 只收到182个,my God, why?害得我现在只能每次发送不
∶ 超过182个,分段才能正常接收.
再用recv收一次就可以了,200个double可能是放在两个IP包中发送的.
∶ 我的天,哪以后我要传送更多的数据可如何是好?
典型的方法有两个:
1.发送数据之前先发送一个长度域,接收方根据该长度进行接收.
2.象FTP那样另开一个数据连接,数据传送结束后关闭该连接.
--
/ / / / / / / / / / / / / /
/ / / / / / /大头大头 / / / / /
/ / / / / / 下雨不愁/ / / / / /
/ / / / / /人家有伞 / / / / / /
/ / / / 我有大头/ / / / / /
/ / / / / / / / / / / /
※ 修改:·railan 於 Mar 8 10:20:09 修改本文·[FROM: ns.net.tsinghua]
※ 修改:·railan 於 Mar 8 10:29:19 修改本文·[FROM: ns.net.tsinghua]
※ 来源:·BBS 水木清华站 smth.org·[FROM: ns.net.tsinghua]
发信人: sophie (心静如水), 信区: Unix
标 题: Re: help for unix socket (转载)
发信站: BBS 水木清华站 (Wed Mar 8 10:50:56 2000)
【 在 railan (雨天 - offer container) 的大作中提到: 】
∶ 再用recv收一次就可以了,200个double可能是放在两个IP包中发送的.
∶ 典型的方法有两个:
∶ 1.发送数据之前先发送一个长度域,接收方根据该长度进行接收.
哦,我正是这样做的呀?先收到长度值n,然后
recv(,,n*sizeof(double),0)可是...
∶ 2.象FTP那样另开一个数据连接,数据传送结束后关闭该连接.
--
※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.114.1.206]
发信人: djq (djq), 信区: Unix
标 题: Re: help for unix socket (转载)
发信站: BBS 水木清华站 (Wed Mar 8 11:33:56 2000)
【 在 sophie (心静如水) 的大作中提到: 】
∶ 哦,我正是这样做的呀?先收到长度值n,然后
∶ recv(,,n*sizeof(double),0)可是...
这个不保证你一定能接受到n个double的.
--
-- Whip me. Beat me. Make me install Oracle. --
※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.136.159]
发信人: netspider (阿军), 信区: Unix
标 题: Re: help for unix socket (转载)
发信站: BBS 水木清华站 (Wed Mar 8 11:52:48 2000)
【 在 sophie (心静如水) 的大作中提到: 】
∶ 哦,我正是这样做的呀?先收到长度值n,然后
∶ recv(,,n*sizeof(double),0)可是...
you should use recv(fd, ptr, n, MSG_WAITALL);
如果系统不支持这个MSG_WAITALL, 我看你还是用那个最土的readn(), 比较好。
--
※ 来源:·BBS 水木清华站 smth.org·[FROM: 159.226.41.166]
发信人: netspider (阿军), 信区: Unix
标 题: Re: help for unix socket (转载)
发信站: BBS 水木清华站 (Wed Mar 8 11:54:39 2000)
【 在 netspider (阿军) 的大作中提到: 】
∶ you should use recv(fd, ptr, n, MSG_WAITALL);
∶ 如果系统不支持这个MSG_WAITALL, 我看你还是用那个最土的readn(), 比较好。
AIX4.1以上支持这个option, you can find it in sys/socket.h
--
※ 来源:·BBS 水木清华站 smth.org·[FROM: 159.226.41.166]
发信人: sophie (心静如水), 信区: Unix
标 题: Re: help for unix socket (转载)
发信站: BBS 水木清华站 (Wed Mar 8 17:06:49 2000)
【 在 mafie (浪人~空手进三月,offer抵万金) 的大作中提到: 】
∶ 如果是TCP socket,send和recv正常返回的话,
∶ 不会出现这个问题的。
我已检验过了,send recv返回的参数都正常.
我偶然将server端的recv()以后的语句删掉后,
(recv()之后是一段计算程序,然后将计算结果send给client)
发现recv收到的数据就符合client端发送出的数据个数了.
现在当server收到这批数据后,若增加一段语句,回
送反馈信息,就不会再有问题了,奇怪!
当我将调通的程序发送接收段增加while{}原样
循环执行两次,第二次执行开始时就出现问题,server端
显示read error.奇怪!
send() & recv() 之间有什么关系?有些什么约束?
--
※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.114.1.206]
发信人: netspider (阿军), 信区: Unix
标 题: Re: help for unix socket (转载)
发信站: BBS 水木清华站 (Wed Mar 8 18:36:26 2000)
【 在 sophie (心静如水) 的大作中提到: 】
∶ 我已检验过了,send recv返回的参数都正常.
∶ 我偶然将server端的recv()以后的语句删掉后,
∶ (recv()之后是一段计算程序,然后将计算结果send给client)
∶ 发现recv收到的数据就符合client端发送出的数据个数了.
∶ 现在当server收到这批数据后,若增加一段语句,回
∶ 送反馈信息,就不会再有问题了,奇怪!
∶ 当我将调通的程序发送接收段增加while{}原样
∶ 循环执行两次,第二次执行开始时就出现问题,server端
∶ 显示read error.奇怪!
∶ send() & recv() 之间有什么关系?有些什么约束?
看不懂的说,你将代码贴上来吧。
--
※ 来源:·BBS 水木清华站 smth.org·[FROM: 159.226.41.129]
BBS水木清华站∶精华区