노력과 삽질 퇴적물

서버: 소켓 프로그래밍 기초 정리 본문

📂게임개발 note/클라우드 & 서버

서버: 소켓 프로그래밍 기초 정리

MTG 2013. 6. 11. 12:14






실제 개발시 요점들.


- 서버<->클라이언트간에 양방향으로 데이터를 빠르게 통신하는데 유용. 스크립트 언어등을 이용한 웹서버의 경우 클라이언트의 요청때만 서버내 데이터 접근하고 속도와 무관할때 유용.

- 모바일의 경우, 커넥션 유지가 되지 않아서 비연결지향으로 구현하게 된다고 한다.

- 3G 통신망은 패킷 사이즈상 소켓 프로그래밍이 낫지만, 개발 측면에서는 웹서버가 유지보수/관리에 유용. 소켓통신을 하고자 하면 node.js가 간편하다고 함. (C로는 구현이 힘들고, JAVA에서는 Nio가 필요함.)

- 대부분 https말고 http로 구현.






소켓통신 종류와 차이점


TCP/IP 소켓

UDP 소켓

 브라우저<->서버간의 일반적인 통신법.

 연결지향
 NW가 정한 패킷에 맞게 보내면서 에러를 체크. (데이터 신뢰도↑↑, 속도 ↘)

 TCP/IP식 패킷검사를 생략.

(데이터 신뢰도, 속도)

 트래픽에 따라 패킷을 나누는 기능X -> 이부분이 개발자 몫

 크기가 작고 실시간에 가까운 통신이 필요할때 적합(스트리밍/전화/스타크래프트 배들넷 등등)



 읽을거리 및 관련 자료.

TCP/IP 그리고 UDP Socket의 차이와 활용 | Lovelyredsky

려리군의 블로그 :: [TCP/IP 소켓 프로그래밍] 4. TCP 기반 서버/클라이언트1

려리군의 블로그 :: [TCP/IP 소켓 프로그래밍] 4. TCP 기반 서버/클라이언트2

Spaurh의 느긋한 블로그 : TCP socket & UDP socket Programming






구현 및 예제. 자바서버 & 자바 클라이언트


* 소켓서버(JAVA)와 안드로이드 통신을 이용한 1인용 채팅(?)입니다.


TcpServer.java

메모.

- while문등으로 소켓(Socket)연결과 스트림 입/출력 연결을 루프시키면 클라에서 메시지를 보낼때마다 송/수신

- while문이 1회전 할때마다 소켓(Socket)을 close (ServerSocket은 close하면 안 됨.)

- 클라이언트와 서버간에 통신할 포트번호가 같은지 확인 할것.



TcpClient.zip

MainActivity.java


 EditText에 입력된 값을 스레드로 전달해서 처리된 결과값으로 화면에 출력

 EditText에 입력했던 값은 스레드와의 입력값 전달시 비움.

ClientRun.java


 {OutputStreamWriter, BufferedWriter, PrintWriter}로 메시지를 클라->서버

 {InputStreamReader, BufferedReader}로 서버->클라로 전송된 메시지를 받음.

 서버에 전달받은 메시지를 getMsg()로 MainActivity가 접근하게 해둠.






기타.


 읽을거리 및 관련 자료.

 안드로이드 기반

 [Android(안드로이드) ☎] Socket 적용 simple 예제

 [안드로이드] 서버/클라이언트 소켓(Socket) 통신하기 

 파이썬 기반

 Joinc: Python 소켓 프로그래밍

 C/C++ 기반

 Joinc: 예제로 알아보는 소켓 프로그래밍

 네트워크 프로그래밍 - TCP/IP 프로그래밍 방법

 Joinc: 멀티 스레드 기반 소켓 프로그래밍


기타.

Joinc: 윈도우즈 네트워크 프로그래밍

PDF, 기본 학습: 소켓 프로그래밍 기본 (파트 2)