linux socket编程-server
来源:互联网 发布:js math 向下取整 编辑:程序博客网 时间:2024/05/01 15:11
#include <stdio.h>#include <sys/socket.h>#include <netinet/in.h>#include <string.h>#define LETH 1024int main(){ int listenfd, connfd, pfd; struct sockaddr_in servaddr; char buf[LETH]; char sendmsg[LETH]; int n; if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { printf("create socket error.\n"); return -1; } printf("create socket.\n"); memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(6666); if (bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1) { printf("bind socket error.\n"); close(listenfd); return -1; } printf("bind socket.\n"); if (listen(listenfd, 10) == -1) { printf("listen socket error.\n"); close(listenfd); return -1; } printf("listen socket.\n"); while(1) { if ((connfd = accept(listenfd, (struct sockaddr *)NULL, NULL)) == -1) { printf("accept socket error.\n"); close(listenfd); return -1; } printf("accept socket.\n"); pfd = fork(); if (pfd < 0) { printf("fork error.\n"); close(listenfd); return -1; } else if (pfd == 0) { while(1) { n = recv(connfd, buf, LETH, 0); buf[n] = '\0'; printf("recv form is %s\n"); if (strstr(buf, "quit") != NULL) { printf("client is quit.\n"); close(connfd); break; } fgets(sendmsg, LETH, stdin); if( send(connfd, sendmsg, strlen(sendmsg), 0) < 0) { printf("send error.\n"); } } } else { continue; } } close(listenfd);}