Last active
July 24, 2019 06:12
-
-
Save surinoel/e8ce9d59f4c1c05b4d1e759ffcc4fa99 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <stdio.h> | |
| #include <stdlib.h> | |
| #include <string.h> | |
| #include <unistd.h> | |
| #include <arpa/inet.h> | |
| #include <sys/socket.h> | |
| #define BUF_SIZE 1024 | |
| int main(int argc, char **argv) | |
| { | |
| int sock; | |
| char msg[BUF_SIZE]; | |
| int str_len; | |
| struct sockaddr_in serv_addr; | |
| if(argc != 3) { | |
| printf("Usage : %s <IP> <port>\n", argv[0]); | |
| return -1; | |
| } | |
| sock = socket(AF_INET, SOCK_STREAM, 0); | |
| if(sock < 0) { | |
| perror("socket"); | |
| return -1; | |
| } | |
| memset(&serv_addr, 0, sizeof(serv_addr)); | |
| serv_addr.sin_family = AF_INET; | |
| serv_addr.sin_addr.s_addr = inet_addr(argv[1]); | |
| serv_addr.sin_port = htons(atoi(argv[2])); | |
| if(connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { | |
| perror("connect"); | |
| return -1; | |
| } | |
| while(1) { | |
| fputs("Input msg(Q to quit): ", stdout); | |
| fgets(msg, BUF_SIZE, stdin); // 개행과 같이 입 | |
| if(!strcmp(msg, "q\n") || !strcmp(msg, "Q\n")) { | |
| break; | |
| } | |
| write(sock, msg, strlen(msg)); | |
| str_len = read(sock, msg, BUF_SIZE-1); | |
| msg[str_len] = 0; | |
| printf("Message from server :%s", msg); | |
| } | |
| close(sock); | |
| return 0; | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <stdio.h> | |
| #include <stdlib.h> | |
| #include <string.h> | |
| #include <unistd.h> | |
| #include <arpa/inet.h> | |
| #include <sys/socket.h> | |
| #define BUF_SIZE 1024 | |
| int main(int argc, char **argv) | |
| { | |
| int serv_sock, clnt_sock; | |
| char msg[BUF_SIZE]; | |
| int str_len; | |
| struct sockaddr_in serv_addr, clnt_addr; | |
| socklen_t clnt_addr_sz; | |
| if(argc != 2) { | |
| printf("Usage : %s <port>\n", argv[0]); | |
| return -1; | |
| } | |
| serv_sock = socket(AF_INET, SOCK_STREAM, 0); | |
| if(serv_sock < 0) { | |
| perror("socket"); | |
| return -1; | |
| } | |
| memset(&serv_addr, 0, sizeof(serv_addr)); | |
| serv_addr.sin_family = AF_INET; | |
| serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); | |
| serv_addr.sin_port = htons(atoi(argv[1])); | |
| if(bind(serv_sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { | |
| perror("bind"); | |
| return -1; | |
| } | |
| if(listen(serv_sock, 5) < 0) { | |
| perror("listen"); | |
| return -1; | |
| } | |
| clnt_addr_sz = sizeof(clnt_addr); | |
| // 총 5번 실행 | |
| for(int i=0; i<5; i++) { | |
| clnt_sock = accept(serv_sock, (struct sockaddr *)&clnt_addr, &clnt_addr_sz); | |
| if(clnt_sock < 0) { | |
| perror("accept"); | |
| return -1; | |
| } | |
| printf("connected client : %d\n", i+1); | |
| // 널 문자를 만날때까지 읽는다 | |
| while((str_len=read(clnt_sock, msg, BUF_SIZE)) != 0) { | |
| write(clnt_sock, msg, str_len); | |
| } | |
| close(clnt_sock); | |
| } | |
| close(serv_sock); | |
| return 0; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment