//服務器端 #include <stdio.h> #include <stdlib.h> #include <errno.h>#include <string.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h> #include <sys/wait.h> #define MYPORT 5999 #define BACKLOG 10 int main(){ int sock_fd, new_fd; struct sockaddr_in my_addr, their_addr; int sin_size; if((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1){ perror("socket"); exit(1); } my_addr.sin_family = AF_INET; my_addr.sin_port = htons(MYPORT); my_addr.sin_addr.s_addr = INADDR_ANY; bzero(&(my_addr.sin_zero), 8); if(bind(sock_fd, (struct sockaddr*)&my_addr, sizeof(struct sockaddr)) == -1){ perror("bind"); exit(1); } if(listen(sock_fd, BACKLOG) == -1){ perror("listen"); exit(1); } while(1){ sin_size = sizeof(struct sockaddr_in); if((new_fd = accept(sock_fd, (struct sockaddr *)&their_addr, &sin_size)) == -1){ perror("accept"); continue; } printf("server.got connection from %s\n",inet_ntoa(their_addr.sin_addr)); if(!fork()){ if(send(new_fd, "Hello,world!\n", 14, 0) == -1){ perror("send"); close(new_fd); exit(0); } } while(waitpid(-1, NULL, WNOHANG) > 0); } } //簡單客戶端 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <netdb.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h> #define PORT 5999 #define MAXDATASIZE 100 int main(int argc, char *argv[]){ int sockfd, numbytes; char buf[MAXDATASIZE]; struct hostent *he; struct sockaddr_in their_addr; if(argc != 2){ fprintf(stderr, "usage: client hostname\n"); exit(1); } if((he = gethostbyname(argv[1])) == NULL){ perror("gethostbyname"); exit(1); } // printf(); if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){ perror("socket"); exit(1); } their_addr.sin_family = AF_INET; their_addr.sin_port = htons(PORT); //their_addr.sin_addr = *((struct in_addr*)he->h_addr); their_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); bzero(&(their_addr.sin_zero), 8); if(connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1){ perror("connect"); exit(1); } if((numbytes = recv(sockfd, buf, MAXDATASIZE, 0)) == -1){ perror("recv"); exit(1); } buf[numbytes] = '\0'; printf("Received: %s", buf); close(sockfd); return 0; }