#include #include#include#include#include#include#include#include
#define PORT 6666 //端口
#define MAXLINE 4096 //字符串长度
#define BACKLOG 10 //侦听队列长度
void conn_server(ints)
{while (true)
{charbuff[MAXLINE];intn;
n=read(s, buff, MAXLINE);
printf("%d read len %d\n",getpid(), n);if (0 >n)
{if (errno ==ECONNRESET)
{
close(s);
}else{
printf("read socket error: %s(errno: %d)", strerror(errno),
errno);
}
exit(0);
}else if (0 ==n)
{
close(s);
exit(0);
}
buff[n]= '\0';
printf("recv msg from client: %s\n", buff);
}
}int main(int argc, char**argv)
{intlistenfd, connfd;structsockaddr_in servaddr;
pid_t pid;if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
printf("create socket error: %s(errno: %d)\n", strerror(errno), errno);
exit(0);
}
unsigned value= 1;
setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR,&value, sizeof(value));
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family= AF_INET; //协议族
servaddr.sin_addr.s_addr = htonl(INADDR_ANY ); //本地地址
servaddr.sin_port = htons(PORT); //服务器端口
if (bind(listenfd, (struct sockaddr*) &servaddr, sizeof(servaddr)) == -1)
{
printf("bind socket error: %s(errno: %d)\n", strerror(errno), errno);
exit(0);
}if (listen(listenfd, BACKLOG) == -1)
{
printf("listen socket error: %s(errno: %d)\n", strerror(errno), errno);
exit(0);
}
printf("======waiting for client's request======\n");while (true)
{if ((connfd = accept(listenfd, (struct sockaddr*) NULL, NULL)) == -1)
{
printf("accept socket error: %s(errno: %d)", strerror(errno),
errno);continue;
}
pid=fork();if(0 ==pid)
{
close(listenfd);
conn_server(connfd);
}
close(connfd);
}
close(listenfd);
}