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"); 展开
发送:
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"); 展开
3个回答
展开全部
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:调用执行方式。
以下资料来自网络:
-----
向一个已连接的套接口发送数据。
#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都是无效的)。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询