*简易TCP客户端与服务端
简易TCP服务器代码
功能:建立简易的TCP服务器,监听各个客户端,为了应对多个连接,并保证它们之间相互独立,加入多进程fork()。让子进程接收数据,父进程继续监听新的连接,接收数据存入recv_buf。
#include#include #include #include #include #include #include #include #include #include #include #define PORT_NUMBER 8888 #define BACKLOG 10 int main(int argc, char** argv) { int sock_fd, new_fd; struct sockaddr_in server_addr; struct sockaddr_in client_addr; int ret; socklen_t addr_len; int recv_len; unsigned char recv_buf[1000]; int client_num = -1; signal(SIGCHLD, SIG_IGN); sock_fd = socket(AF_INET, SOCK_STREAM, 0);//AF_INET:IPV4;SOCK_STREAM:TCP if (-1 == sock_fd) { fprintf(stderr, "socket error:%sna", strerror(errno)); exit(1); } memset(&server_addr, 0, sizeof(struct sockaddr_in));//clear server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//INADDR_ANY:This machine all IP server_addr.sin_port = htons(PORT_NUMBER); ret = bind(sock_fd, (struct sockaddr*)(&server_addr), sizeof(struct sockaddr)); if (-1 == ret) { fprintf(stderr, "bind error:%sna", strerror(errno)); close(sock_fd); exit(1); } ret = listen(sock_fd, BACKLOG); if (-1 == ret) { fprintf(stderr, "listen error:%sna", strerror(errno)); close(sock_fd); exit(1); } while (1) { addr_len = sizeof(struct sockaddr); new_fd = accept(sock_fd, (struct sockaddr*)&client_addr, &addr_len); if (-1 == new_fd) { fprintf(stderr, "accept error:%sna", strerror(errno)); close(sock_fd); exit(1); } client_num++; fprintf(stderr, "Server get connetion form client%d: %sn", client_num, inet_ntoa(client_addr.sin_addr)); if (!fork()) { while (1) { recv_len = recv(new_fd, recv_buf, 999, 0); if (recv_len <= 0) { fprintf(stderr, "recv error:%sna", strerror(errno)); close(new_fd); exit(1); } else { recv_buf[recv_len] = ' '; printf("Get msg from client%d: %sn", client_num, recv_buf); } } close(new_fd); } } close(sock_fd); exit(0); }
简易TCP客户端代码
功能:建立简易的TCP客户端,可向服务器发送任意字符数据
#include#include #include #include #include #include #include #include #include #include #define PORT_NUMBER 8888 int main(int argc, char* argv[]) { int sock_fd; struct sockaddr_in server_addr; int ret; char send_buf[1000]; int send_len; if (argc != 2) { fprintf(stderr, "Usage:%s hostnamena", argv[0]); exit(1); } sock_fd = socket(AF_INET, SOCK_STREAM, 0);//AF_INET:IPV4;SOCK_STREAM:TCP if (-1 == sock_fd) { fprintf(stderr, "socket error:%sna", strerror(errno)); exit(1); } memset(&server_addr, 0, sizeof(struct sockaddr_in));//clear server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT_NUMBER); ret = inet_aton(argv[1], &server_addr.sin_addr); if (0 == ret) { fprintf(stderr, "server_ip error.n"); close(sock_fd); exit(1); } ret = connect(sock_fd, (const struct sockaddr*)&server_addr, sizeof(struct sockaddr)); if (-1 == ret) { fprintf(stderr, "connect error:%sna", strerror(errno)); close(sock_fd); exit(1); } while (1) { if (fgets(send_buf, 999, stdin)) { send_len = send(sock_fd, send_buf, strlen(send_buf), 0); if (send_len <= 0) { fprintf(stderr, "send error:%sna", strerror(errno)); close(sock_fd); exit(1); } } } close(sock_fd); exit(0); }



