send函数发出的buf中有信息,但是到了recv函数,接收到的buf是空的,而recvbyte返回的是0,这是什么原因

send函数发出的buf中有信息,但是到了recv函数,接收到的buf是空的,而recvbyte返回的是0,这是什么原因造成的发送:memset(listpath,0,s... send函数发出的buf中有信息,但是到了recv函数,接收到的buf是空的,而recvbyte返回的是0,这是什么原因造成的
发送:
memset(listpath, 0, sizeof(listpath));
scanf("%s",listpath);
strcpy(request,listpath);
if ((sendbytes = send(sockfd, request, strlen(request), 0)) == -1){
perror("send_list_request");
exit(1);}
接收:
bzero(request,sizeof(request));
if ((recvbytes = recv(client_fd, request, strlen(request), 0)) == -1){
perror("recv_request_list");
展开
 我来答
yuantailing
2013-09-12 · TA获得超过2545个赞
知道小有建树答主
回答量:1167
采纳率:92%
帮助的人:645万
展开全部
send要填写发送的大小,你是不是填成0了?还有最后那个参数flags也注意一下,填0应该可以。

以下资料来自网络:
-----
向一个已连接的套接口发送数据。
#include <winsock.h>
int PASCAL FAR send( SOCKET s, const char FAR* buf, int len, int flags);
s:一个用于标识已连接套接口的描述字。
buf:包含待发送数据的缓冲区。
len:缓冲区中数据的长度。
flags:调用执行方式。
追问
代码我贴上去了,  我昨天研究了一下,可能是strlen这里的问题, 是不是用sizeof会好一点
追答
接收的那里错了:
recv(client_fd, request, strlen(request), 0))

你刚刚把request置为0,这时候计算strlen肯定是0!接受函数的意思是接受字符数不超过第三个参数,返回值是实际接收到的字符数。因此你把第三个参数尽可能填大一些就可以了(比如填1024,好像在Win Socket里超过40KB都是无效的)。
嘉银2011
2013-09-12 · 超过37用户采纳过TA的回答
知道小有建树答主
回答量:321
采纳率:0%
帮助的人:104万
展开全部
看看你的输入法是不是对的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
俎晨朗7F
2013-09-12 · 超过48用户采纳过TA的回答
知道小有建树答主
回答量:94
采纳率:0%
帮助的人:117万
展开全部
你是在用什么类的send函数和recv函数?说清楚些
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式