我有一个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包接收后一定要会复消息,我这样写不知道可以吗?
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包接收后一定要会复消息,我这样写不知道可以吗?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货