当前位置: 技术问答>linux和unix
一个网络编程中send函数的菜鸟问题
来源: 互联网 发布时间:2016-01-01
本文导语: 刚接触linux网络编程,碰到一些烦人的小问题,比如说写一个测试程序,写了一个客户端和服务器端的程序,实现功能很简单,客户端发送一个字符串给服务器断,服务器断将这个字符串处理一下然后返回给客户端,在我建立了...
刚接触linux网络编程,碰到一些烦人的小问题,比如说写一个测试程序,写了一个客户端和服务器端的程序,实现功能很简单,客户端发送一个字符串给服务器断,服务器断将这个字符串处理一下然后返回给客户端,在我建立了连接之后在客户端用send()之后发现服务器断接收不到字符串,后来测试了半天我在send之后马上关掉连接的socket文件sockfd服务器端马上就收到了,我想问一下是不是每次send之后一定要关掉连接的sockfd才能再服务器端才能接收到客户端发送的字符串的??如果是这样我要再后面的程序中接收来自服务器端回送的字符串之后应该怎么办呢?总不能说我重新建立一个连接吧.......郁闷中.
|
程序已经调试完了,好用。
你的服务器端程序中的getbuf函数中的接收消息别用循环
while( (n=recv(sockfd,tempbuf,MAXLEN,0))>0 )
改为
if ( (n=recv(sockfd,tempbuf,MAXLEN,0))>0 )
就可以了
结果请回复,谢谢!
你的服务器端程序中的getbuf函数中的接收消息别用循环
while( (n=recv(sockfd,tempbuf,MAXLEN,0))>0 )
改为
if ( (n=recv(sockfd,tempbuf,MAXLEN,0))>0 )
就可以了
结果请回复,谢谢!
|
你在getbuf函数中用select控制sockfd的阻塞。
可以像这样:
fd_set rd;
struct timeval time;
time.tv_sec = 10;
time.tv_usec = 0;
FD_ZERO(&rd);
FD_SET(sockfd,&rd);
index=0;
n=0;
while(1)
{
if(select(sockfd+1,&rd,NULL,NULL,&time) > 0)
n=recv(sockfd,tempbuf,MAXLEN,0);
else
break;
if(n == 0)
break;
if(n == -1)
break;
printf("recv buf len %dn",n);
for(i=0;i
可以像这样:
fd_set rd;
struct timeval time;
time.tv_sec = 10;
time.tv_usec = 0;
FD_ZERO(&rd);
FD_SET(sockfd,&rd);
index=0;
n=0;
while(1)
{
if(select(sockfd+1,&rd,NULL,NULL,&time) > 0)
n=recv(sockfd,tempbuf,MAXLEN,0);
else
break;
if(n == 0)
break;
if(n == -1)
break;
printf("recv buf len %dn",n);
for(i=0;i