From 37d78574815b0892fd06c34379d3b80d05050fe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=AF=BC=EC=84=9C?= Date: Fri, 11 May 2018 13:08:54 +0900 Subject: [PATCH] filetest source --- StringSocket/Makefile | 9 ++++ StringSocket/client.c | 106 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 StringSocket/Makefile create mode 100644 StringSocket/client.c diff --git a/StringSocket/Makefile b/StringSocket/Makefile new file mode 100644 index 0000000..f6460f6 --- /dev/null +++ b/StringSocket/Makefile @@ -0,0 +1,9 @@ +all: client + +CC = gcc + +client: client.c + $(CC) -o $@ $^ -g + +clean: + rm *.o \ No newline at end of file diff --git a/StringSocket/client.c b/StringSocket/client.c new file mode 100644 index 0000000..f3a950c --- /dev/null +++ b/StringSocket/client.c @@ -0,0 +1,106 @@ +/* + * client.c * + * Created on: 2018. 5. 9. + * Author: minseo + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define BUFSIZE 1024 + +void main() { + int socket_fd; + int data_size; + int send_size; + int all_size = 0; + int receive_len; + int i; + struct sockaddr_in server_addr; + char data_buf[1000000]; + char* data; + char send_buf[BUFSIZE] = { '\0', }; + char receive_buf[BUFSIZE] = { '\0', }; + int snd_buf; + socklen_t len; + + if ((socket_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { + exit(1); + } + +// if(getsockopt(socket_fd, SOL_SOCKET, SO_SNDBUF, &snd_buf, &len)) { +// perror("getsockop error"); +// exit(1); +// } +// printf("%d \n", snd_buf); + + memset(&server_addr, 0, sizeof(server_addr)); + server_addr.sin_family = AF_INET; + server_addr.sin_addr.s_addr = inet_addr("192.168.56.103"); + server_addr.sin_port = htons(50000); + + if (connect(socket_fd, (struct sockaddr*) &server_addr, sizeof(server_addr)) + == -1) { + perror("connect error"); + exit(1); + } + + //strcpy(send_buf, "happy birthday"); + + for (i = 0; i < 1000; i++) { + strcat(data_buf, "abcdefghijklmnopqrstuvwxyz"); + } + + data = (char *) malloc(sizeof(strlen(data_buf) + 1)); + data = data_buf; +// printf("%s \n", data); + + // 1. data size를 전달. + data_size = strlen(data); + sprintf(send_buf, "%d", data_size); + + if (send(socket_fd, send_buf, strlen(send_buf), 0) != strlen(send_buf)) { + exit(1); + } + + // 2. size가 잘 도착했는지 확인. + if ((receive_len = recv(socket_fd, receive_buf, BUFSIZE - 1, 0)) == -1) { + exit(1); + } + + // 3. data size와 보낸 data size를 확인. size가 일치하지 않으면 exit! + if (data_size != atoi(receive_buf)) { + printf("data size error. \n"); + exit(1); + } + + printf("%d \n", atoi(receive_buf)); + +// printf("%s \n", send_buf); + + i = 1; + // 4. size가 일치하면 데이터 전달. + while (1) { + if ((send_size = send(socket_fd, &data + i, BUFSIZE, 0)) != BUFSIZE) { + exit(1); + } + i++; + data_size -= 1024; + if (data_size < 1024) { + if ((send_size = send(socket_fd, &data + i, data_size, 0)) != data_size) { + exit(1); + } + break; + } + } + + close(socket_fd); + +} -- GitLab