리눅스 Centos 6.5 환경 - 소켓 프로그램
서버 프로그램
#include <stdio.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define PORT 9000
char buffer[BUFSIZ] = "hello, world";
main()
{
int c_socket, s_socket; //소켓 생성 위한 변수(클라이언트 소켓, 서버 소켓)
struct sockaddr_in s_addr, c_addr; //소켓의 주소 저장
int len, n;
s_socket = socket(PF_INET, SOCK_STREAM, 0);
memset(&s_addr, 0, sizeof(s_addr));
s_addr.sin_addr.s_addr = htonl(INADDR_ANY); //host 방식을 네트워크 방식으로 변경
s_addr.sin_family = AF_INET;
s_addr.sin_port = htons(PORT); // 포트 설정
if(bind(s_socket, (struct sockaddr *)&s_addr, sizeof(s_addr)) == -1){ //소켓과 주소의 연결
printf("Can not Bind!!\n");
return -1;
}
if(listen(s_socket, 5) == -1){ //소켓에 접속을 기다리고 있다
printf("listen Fail\n");
return -1;
}
while(1){
len = sizeof(c_addr);
c_socket = accept(s_socket, (struct sockaddr *)&c_addr, &len); //소켓에 접속하면 연결
n=strlen(buffer);
write(c_socket, buffer, n); //buffer의 내용을 전송한다
close(c_socket);
}
close(s_socket);
}
클라이언트 프로그램
#include <stdio.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define PORT 9000
#define IPADDR "127.0.0.1"
char rcvBuffer[BUFSIZ];
main()
{
int c_socket; //s_socket 불필요
struct sockaddr_in s_addr, c_addr;
int len, n;
c_socket = socket(PF_INET, SOCK_STREAM, 0);
memset(&c_addr, 0, sizeof(c_addr));
c_addr.sin_addr.s_addr=inet_addr(IPADDR);
c_addr.sin_family=AF_INET;
c_addr.sin_port=htons(PORT); //주소를 자기자신으로 변경한 것을 제외하고 서버와 동일
if(connect(c_socket, (struct sockaddr *)&c_addr, sizeof(c_addr)) == -1){ //서버와 연결
printf("Can not Connection\n");
close(c_socket);
return -1;
}
if( n = read(c_socket, rcvBuffer, sizeof(rcvBuffer)) < 0){
return -1; // 서버의 데이터를 읽어 rcvBuffer에 저장한다.
}
rcvBuffer[n] = '\0'; // 문장을 마무리하기 위해서 마지막에 널문자 삽입
printf("received Date : %s\n", rcvBuffer); //rcvBuffer 출력
close(c_socket);
}
'Network' 카테고리의 다른 글
클라이언트 프로그램과 서버 프로그램 (0) | 2017.02.13 |
---|---|
웹 프로그램의 이해 (0) | 2017.02.13 |
패킷트레이서 inter-vlan 구성 (0) | 2016.01.25 |
VLAN 설정 방법 (패킷트레이서) (0) | 2016.01.24 |
패킷트레이서 - 라우터, telnet, console 암호화 (2) | 2016.01.02 |