《《急问题》》 关于TCP包接收的问题,为何只能接收几次就停了呢?

stevenying 2005-08-08 05:23:23
我有一个C的TCP包接收程序如下:
static void tcpecho_thread(void *arg)
{
int sockfd, new_fd;
struct sockaddr_in my_addr;
struct sockaddr_in their_addr;
int sin_size;
int numbytes;
int port_numb = 8686;
char buf[256];

if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
printf("\n TCP socket open error!");
close(sockfd);
return;
}
else
printf("\n TCP socket open ok!");

//initialize & bind
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(port_numb);
my_addr.sin_addr.s_addr = INADDR_ANY;
BZERO(&(my_addr.sin_zero),8);

//bind socket
if(bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))== -1)
{
printf("\n TCP socket bind error!");
close(sockfd);
return;
}
else
printf("\n TCP socket bind ok!");


//create listen socket.
if(listen(sockfd, 10) == -1)
{
printf("\n TCP socket listen error!");
close(sockfd);
return;
}
else
printf("\n TCP socket listen ok!");

//wait fot connection
while(1)
{
sin_size = sizeof(struct sockaddr_in);

if((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1)
{
printf("\n New socket can not be created!");
return;
}
else
printf("\n New socket is created!");

//Read info
if((numbytes = recv(new_fd, buf, 256, 0)) == -1)
{
printf("\n Read data error!");
return;
}
else
{
printf((char *)buf);
printf("\n Read data!");
}

//Send info back
if(send(new_fd, "ok!", strlen("ok!"), 0) == -1)
{
printf("\n Send Error!");
return;
}
else
printf("\n Send ok!");

//close(new_fd);
}
//close(new_fd);
close(sockfd);
}

另外一端用程序发送TCP打包的字串,程序运行后发现每次在打印“Read data!”的地方只出现了8次就再也不出现了,socket连接是没有问题的,大家有没有好的建议,多谢!

TCP包接收后一定要会复消息,我这样写不知道可以吗?
...全文
99 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
popyyb 2005-08-11
  • 打赏
  • 举报
回复
估计你发包的程序有问题
stevenying 2005-08-09
  • 打赏
  • 举报
回复
自己顶
stevenying 2005-08-09
  • 打赏
  • 举报
回复
up
fangxinyan 2005-08-08
  • 打赏
  • 举报
回复
属于阻塞式的,accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1),会一直阻在那里,等待下一个连接消息的请求,可以设计多线程。若只是一个计算机连接,则把accept()提出循环外边,但是现在循环还没有出口呢?
stevenying 2005-08-08
  • 打赏
  • 举报
回复
没人?
stevenying 2005-08-08
  • 打赏
  • 举报
回复
大家多指点啊
stevenying 2005-08-08
  • 打赏
  • 举报
回复
楼上大侠能不能说清楚点啊,多谢了
umbrella1984 2005-08-08
  • 打赏
  • 举报
回复
accept放到外面,你这个在循环里面需要在客户端每次发信息时也要重新连接一次。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧