简单的tcp通讯例子。
server端
/* tcp_server.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #define MYPORT 8000 int main() { int server_fd, client_fd; struct sockaddr_in my_addr, client_addr; server_fd = socket(AF_INET, SOCK_STREAM, 0); my_addr.sin_family = AF_INET; /* 主机字节序 */ my_addr.sin_port = htons(MYPORT); /* short, 网络字节序 */ my_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); bzero(&(my_addr.sin_zero), 8); /* zero the rest of the struct */ bind(server_fd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)); listen(server_fd, 10); while (1) { char buf[20]; printf("server is waiting\n"); int client_len = sizeof(struct sockaddr); client_fd = accept(server_fd, (struct sockaddr*)&client_addr, &client_len); printf("accepted\n"); int n = recv(client_fd, buf, 20, 0); printf("received from client %s\n", buf); for (int i=0; i<n; i++) { if (buf[i]>=97 && buf[i]<=122) { buf[i] -= 32; } } send(client_fd, buf, 20, 0); close(client_fd); } close(server_fd); return 0; }
client端
/* tcp_client.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> int main() { int client_fd; struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8000); server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); bzero(&(server_addr.sin_zero), 8); client_fd = socket(AF_INET, SOCK_STREAM, 0); connect(client_fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)); send(client_fd, "hello\0", 6, 0); char buf[20]; bzero(buf, 20); recv(client_fd, buf, sizeof(buf), 0); printf("recv %s\n", buf); close(client_fd); return 0; }