代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/wait.h>
#define SERVPORT 8080
#define BACKLOG 10
int sockfd,client_fd,sin_size;
int TCPSend(char data[])
{
int length;
length=send(sockfd,data,strlen(data),0);
if(length<=0)
{
printf("send data error!\n");
close(sockfd);
return(-1);
}
return (1);
}
main()
{
char data[100]="This is data!\n";
char buf[100];
char buf1[]="send data test!";
int recvbytes;
struct sockaddr_in my_addr;
struct sockaddr_in remote_addr;
bzero(buf,100);
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
printf("socket create error!");
exit(1);
}
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(SERVPORT);
my_addr.sin_addr.s_addr=INADDR_ANY;
bzero(&(my_addr.sin_zero),8);
if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr))==-1)
{
printf("bind error!");
exit(1);
}
if(listen(sockfd,BACKLOG)==-1)
{
printf("listen error!");
exit(1);
}
while(1)
{
sin_size=sizeof(struct sockaddr_in);
if((client_fd=accept(sockfd,(struct sockaddr*)&remote_addr,&sin_size))==-1)
{
printf("accept error!");
continue;
}
printf(" Receved a connection from %s!\n",inet_ntoa(remote_addr.sin_addr));
//TCPSend(buf1);----------(1)
if((recvbytes=recv(client_fd,buf,100,0))==-1)
{
perror("recv 出错!");
exit(1);
}
else
{
TCPSend(buf1);//-----(2)
printf("buf1 has been sent!");
}
bzero(buf,100);
close(client_fd);
}
}
我希望该程序完成的工作是服务器接收客户端发来的数据,然后再给客户端发送一个数据,我遇到的问题是,服务器能接收到客户端的数据,但无法把数据发给客户端,我试了下,如果服务器不接收数据,只发送,客户端可以接收到服务器的数据,还有服务器先发送后接收(即把TCPSend(buf1)发在(1)处),也是能正常工作的,就是在服务器先收后发的时候出问题,客户端收不到服务器发的数据,这是怎么回事?该如何解决?
呼啦一阵风
慕码人8056858
胡子哥哥
随时随地看视频慕课网APP