본문 바로가기
CS/네트워크

[윤성우의 열혈 TCP/IP 소켓 프로그래밍] 네트워크 프로그래밍 & 소켓

by merona99 2019. 1. 12.
반응형

네트워크 프로그래밍 & 소켓

//열혈 TCP/IP를 기반으로 작성~_~

아직 리눅스를 잘몰라서 원도우로 공부해야겠다.. 했는데 

두가지 다 사용 할 줄 알아야 한다해서 리눅스도 같이 하기로 ㅎㅎ

 

 

네트워크 프로그래밍 : 네트워크로 연결되어 있는 서로 다른 두 컴퓨터가 데이터를 주고받을 수 있도록 하는 것

소켓 : 물리적으로 연결된 네트워크상에서의 데이터 송수신에 사용할 수 있는 소프트웨어적인 장치

 

 

<순서>

 

1. 소켓 생성    (socket 함수호출)

2. IP주소와 PORT번호 할당    (bind 함수호출)

3. 연결요청 가능상태로 변경    (listen 함수호출)

4. 연결요청에 대한 수락    (accept 함수호출)

 

 

서버 소켓

bind  IP주소와 PORT번호 할당 
listen 연결요청 가능상태로 변경 
accept 연결요청에 대한 수락 

 

클라이언트 소켓

 socket  socket 함수 호출
 connect  서버로의 연결요청

 

 

<구현>

 

리눅스 : 소켓을 파일의 일종으로 구분

파일 입출력 함수를 소켓 입출력에 사용 가능

 

윈도우 : 파일과 소켓을 구분

별도의 데이터 송수신 함수를 참조

 

더보기

<리눅스 기반으로 구현>

 

파일 디스크립터 : 시스템으로부터 할당 받은 파일 또는 소켓에 부여된 정수

 

클라이언트 프로그램

 

 

 

서버 프로그램

 

 

 

서버를 먼저 실행

 

서버가 실행중인 상태에서 클라이언트의 연결요청이 들어가야 하기 때문임

./hserver 9190 을 치고난 이후에 서버는 대기상태로 있음

 

 

 

클라이언트 실행

 

또다른 터미널로 클라이언트를 실행하면 메세지가 전달되고 클라이언트의 메세지를 수신하여

프로그램이 종료됨

 

 

 

 

더보기

<윈도우 기반으로 구현>

 

상당부분 BSD 계열 유닉스 소켓을 참고하여 설계됨

  • 헤더파일 winsock2.h가 포함됨
  • ws2_32.lib 라이브러리를 링크

 

<윈속의 초기화>

int WSAStartup(WORD wVersionRequested, Lpwsadata lpWSAData);

 

첫 번째 매개변수 : 윈속의 버전정보

두 번째 매게변수 : WSADATA라는 구조체 변수의 주소 값 전달

 

 

<초기화 된 라이브러리 해제>

int WSACleanup();
성공 시 o, 실패시 SOCKET_ERROR 반환
<소켓을 닫을 때 호출하는 함수>int closesocket(SOCKET s);

성공 시 o, 실패시 SOCKET_ERROR 반환

 

 

핸들 : 리눅스 상의 파일 디스크립터와 같음
클라이언트 프로그램


서버 프로그램

 

 

//리눅스로는 실행도 잘되는데 윈도우로 하려니까 먼가 더 손이가고 중요한건 실행이 안된다..

서버는 돌아가는데 클라이언트는 또 왜 안돌아가고 같이 실행이 왜 안될까;; 흠..

코드는 맞게 한거 같은데 말이다ㅋㅋ..

 

 


참고 문서 : 윤성우의 열혈 tcp/ip 소켓 프로그래밍

반응형

댓글