네트워크 프로그래밍 & 소켓
//열혈 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 소켓 프로그래밍
'CS > 네트워크' 카테고리의 다른 글
[윤성우의 열혈 TCP/IP 소켓 프로그래밍] TCP 기반 서버/클라이언트 (윈도우) (0) | 2019.02.07 |
---|---|
[윤성우의 열혈 TCP/IP 소켓 프로그래밍] TCP 기반 서버/클라이언트 1 (0) | 2019.02.05 |
[윤성우의 열혈 TCP/IP 소켓 프로그래밍] 주소체계 & 데이터 정렬 (0) | 2019.02.02 |
[윤성우의 열혈 TCP/IP 소켓 프로그래밍] 프로토콜 (0) | 2019.02.02 |
[윤성우의 열혈 TCP/IP 소켓 프로그래밍] Chapter 01 내용 확인문제 (0) | 2019.01.31 |
댓글