《《急问题》》 关于TCP包接收的问题,为何只能接收几次就停了呢?
我有一个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包接收后一定要会复消息,我这样写不知道可以吗?