linux網路程式設計——Socket
阿新 • • 發佈:2018-12-18
//server #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> static void usage(const char* proc) { printf("usage:%s [port]\n", proc); } int startup(int _port) { int sock = socket(AF_INET, SOCK_STREAM, 0); if(sock < 0) { perror("creat socket fail"); exit(1); } struct sockaddr_in server; memset(&server, 0, sizeof(server)); server.sin_family = AF_INET; server.sin_port = htons(_port); server.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(sock, (struct sockaddr*)&server, sizeof(server)) < 0) { perror("bind error"); exit(2); } if(listen(sock, 5) < 0) { perror("listen error"); exit(3); } return sock; } int main(int argc, char* argv[]) { if(argc != 2) { usage(argv[0]); return 3; } int listen_socket = startup(atoi(argv[1])); struct sockaddr_in remote; socklen_t len = sizeof(struct sockaddr_in); while(1) { int socket = accept(listen_socket, (struct sockaddr*)&remote, &len); if(socket < 0) { perror("accept error"); continue; } printf("#client, ip:%s, port:%d#\n", inet_ntoa(remote.sin_addr), ntohs(remote.sin_port)); char buf[1024]; while(1) { ssize_t _s = read(socket, buf, sizeof(buf)-1); if(_s > 0) { buf[_s] = 0; printf("#client# %s\n", buf); } else { printf("client is quit!\n"); break; } } close(socket); } return 0; }
//client #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> static void usage(const char* proc) { printf("usage:%s [ip] [port]\n", proc); } int main(int argc, char* argv[]) { if(argc != 3) { usage(argv[0]); return 3; } int sock = socket(AF_INET, SOCK_STREAM, 0); if(sock < 0) { perror("socket error"); exit(1); } struct sockaddr_in server; memset(&server, 0, sizeof(server)); server.sin_family = AF_INET; server.sin_port = htons(atoi(argv[2])); server.sin_addr.s_addr = inet_addr(argv[1]); if(connect(sock, (struct sockaddr*)&server, sizeof(server)) < 0) { perror("connect error"); exit(2); } char buf[1024]; while(1) { printf("#send# "); fflush(stdout); ssize_t _s = read(0, buf, sizeof(buf)-1); buf[_s-1] = 0; write(sock, buf, _s); } close(sock); return 0; }