02-基本TCP套接字程式設計
阿新 • • 發佈:2018-12-13
//server.c #include <stdio.h> #include <unistd.h> #include <string.h> #include <errno.h> #include <ctype.h> #include <sys/socket.h> #include <stdlib.h> #include <arpa/inet.h> #define SERV_PROT 9527 void sys_err(const char *str) { perror(str); exit(1); } int main() { int lfd = 0, cfd = 0; int ret; int i; char buf[BUFSIZ], client_IP[1024]; //系統定義巨集:4096 struct sockaddr_in serv_addr, clit_addr; socklen_t clit_addr_len; serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(SERV_PROT); serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); lfd = socket(AF_INET, SOCK_STREAM, 0); if (lfd == -1) sys_err("socket error"); bind(lfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)); listen(lfd, 20); clit_addr_len = sizeof(clit_addr); cfd = accept(lfd, (struct sockaddr*)&clit_addr, &clit_addr_len); if (cfd == -1) sys_err("accept error"); printf("client ip :%s port: %d\n", inet_ntop(AF_INET, &clit_addr.sin_addr.s_addr, client_IP, sizeof(client_IP)), ntohs(clit_addr.sin_port)); while (1) { ret = read(cfd, buf, sizeof(buf)); write(STDOUT_FILENO, buf, ret); for (i = 0; i < ret; i++) buf[i] = toupper(buf[i]); write(cfd, buf, ret); } close(lfd); close(cfd); return 0; }
//client.c #include <stdio.h> #include <unistd.h> #include <string.h> #include <errno.h> #include <ctype.h> #include <sys/socket.h> #include <stdlib.h> #include <arpa/inet.h> #define SERV_PROT 9527 void sys_err(const char *str) { perror(str); exit(1); } int main() { int cfd; int conter = 10; char buf[BUFSIZ]; struct sockaddr_in serv_addr; serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(SERV_PROT); inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr.s_addr); cfd = socket(AF_INET, SOCK_STREAM, 0); if (cfd == -1) sys_err("socket error"); int ret = connect(cfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); if (ret != 0) sys_err("connect err"); while (--conter) { write(cfd, "hello\n", 6); ret = read(cfd, buf, sizeof(buf)); write(STDOUT_FILENO, buf, ret); sleep(1); } close(cfd); return 0; }