单一接受连接的tcp server
关键词:socket、bind、listen、accept、recv、send
int main()
{
int listenfd = socket(PF_INET, SOCK_STREAM, 0);
if(listenfd == -1) {
printf("create socket error: %s(errno: %d)\n", strerror(errno), errno);
exit(-1);
}
struct sockaddr_in servaddr = {0};
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(8888);
servaddr.sin_addr.s_addr = INADDR_ANY;
if(bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1) {
printf("bind socket error: %s(errno: %d)\n", strerror(errno), errno);
exit(-1);
}
if(listen(listenfd, 1) == -1) {
printf("listen socket error: %s(errno: %d)\n", strerror(errno), errno);
exit(-1);
}
struct sockaddr_in clientaddr = {0};
socklen_t addrlen = sizeof(clientaddr);
printf("=======waiting for client's connect=======\n");
int connfd = accept(listenfd, (struct sockaddr*)&clientaddr, &addrlen);
if(connfd == -1){
printf("accept socket error: %s(errno: %d)\n", strerror(errno), errno);
exit(-1);
}
int nread;
char buff[MAXLEN] = {0};
while(1) {
printf("=======waiting for client's request=======\n");
nread = recv(connfd, buff, MAXLEN, 0);
if(nread > 0) {
buff[nread] = '\0';
printf("recv msg from client(%d): %s\n", connfd, buff);
send(connfd, buff, nread, 0);
} else {
close(connfd);
break;
}
}
close(listenfd);
return 0;
}