#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <signal.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <arpa/inet.h>
void error_handling(char *msg)
{
fputs(msg, stderr);
fputc('\n', stderr);
terminated();
}
int main()
{
int serv_sock;
int clnt_sock;
char lsBuf[128] = {0,};
struct sockaddr_in serv_addr;
struct sockaddr_in clnt_addr;
socklen_t clnt_addr_size;
serv_sock = socket(PF_INET, SOCK_STREAM, 0);
giSock_Serv = serv_sock;
if(serv_sock < 0)
error_handling("socket error");
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr(gsIpLocal); // 따로 받아옴
serv_addr.sin_port = htons(giPort); // 따로 받아옴
if ((setsockopt(serv_sock, SOL_SOCKET, SO_REUSEADDR, (char *)&liOn, sizeof(liOn))) == -1)
error_handling("SO_REUSEADDR error");
if( bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0 )
error_handling("bind error");
if( listen(serv_sock, 5) < 0 )
error_handling("listen error");
clnt_addr_size = sizeof(clnt_addr);
clnt_sock = accept( serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
giSock_Clnt = clnt_sock;
if( clnt_sock < 0 )
error_handling("accept error");
memset(lsBuf, 0x00, sizeof(lsBuf));
sprintf(lsBuf, "Server Reply!! \n");
write(clnt_sock, lsBuf, sizeof(lsBuf));
while(1)
{
printf("Waiting... \n");
memset(lsBuf, 0x00, sizeof(lsBuf));
liRtn = recv(clnt_sock, lsBuf, sizeof(lsBuf)-1, 0);
if(liRtn < 0)
error_handling("recv error");
printf("Recv Success[%d]!! \n", liRtn);
if(memcmp(lsBuf, "quit", liRtn-2) == 0)
{
printf("Close Client Connection... \n");
break;
}
printf(">> Client Msg : %s \n", lsBuf);
printf("<< Send Msg : ");
memset(lsBuf, 0x00, sizeof(lsBuf));
fgets(lsBuf, sizeof(lsBuf), stdin);
send(clnt_sock, lsBuf, sizeof(lsBuf), 0);
if(strcmp(lsBuf, "quit") == 0) break;
}
close(clnt_sock);
close(serv_sock);
return 0;
}
통신 확인은 telent 이 있을경우 위의 서버 프로세스 실행시킨후 telnet으로 연결시도하면 됨.
'통신 > 소켓' 카테고리의 다른 글
| tcpdump - 통신로그확인 프로그램 (0) | 2023.10.30 |
|---|---|
| 블로킹 소캣(송수신 버퍼 동작원리) (0) | 2022.07.18 |
| 소켓 주소 구조체 (0) | 2022.07.18 |
| 소캣관련 함수 모음 (0) | 2022.07.18 |
| 이론 - TCP / UDP (0) | 2022.07.18 |