[네트워크(Networks)] C#, C++, Java에서의 소켓 프로그래밍
이번에 소개할 것은 C#, C++, Java에서 소켓 프로그래밍을 사용하는 방법에 대해서 소개한다.
1. 소스코드
C#에서의 소켓 프로그래밍 작성 예시이다.
IPv4 환경에서 확인함.
소프트웨어: Visual Studio Community 2015
namespace Example public void listenSocket() IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 8088); server.Bind(ipEndPoint); System.Console.WriteLine("연결 요청(Connection Request)"); // 클라이언트 연결 받음. // 클라이언트의 데이터 - 보내기 / 받기 System.Console.WriteLine(Encoding.Default.GetString(buf)); } class ClientSide IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8088); Console.WriteLine("소켓 연결(Socket connect)"); // 데이터 자료 바이트 형으로 받아오기 // 형 변환 -> getString() 형으로 인코딩 Console.WriteLine(buf); buf = "소켓 접속 확인 됐습니다."; client.Send(data); Console.WriteLine("아무 키나 눌러주세요."); } |
NetworkSide.cs |
using System; namespace Example |
Program.cs |
[첨부(Attachment)]
network_csharp.7z
2. (Gpp)C++에서의 소켓 프로그래밍 작성 예시입니다. (리눅스에서만 가능)
C언어로 구현된 소켓 프로그래밍을 C++에서도 지원이 가능한 형태로 제작하였다.
IPv4 기반에 맞춰 작성함.
소프트웨어: Gpp, Gcc
/* #include <iostream> using namespace std; #ifndef SERVER_H_ // 0. // 1. 서버사이드(Server-Side) protected: private: public: void listenSingleSocket(){ char buffer[1024]; welcomeSocket = socket(PF_INET, SOCK_STREAM, 0); serverAddr.sin_family = AF_INET; int i = 0; while(i < sizeof(serverAddr.sin_zero) ){ bind(welcomeSocket, (struct sockaddr *) &serverAddr, sizeof(serverAddr) ); addr_size = sizeof(serverStorage); send(newSocket, buffer, 13, 0); } }; class Client : public INetwork{ private: public: void listenSingleSocket(){ clientSocket = socket(PF_INET, SOCK_STREAM, 0); serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); int i = 0; addr_size = sizeof(serverAddr); connect(clientSocket, (struct sockaddr *) &serverAddr, addr_size); // 문자열 전달 받음 - (unsigned) char[1024] }; #endif /* SERVER_H_ */ |
Network.h |
#include <iostream> using namespace std; Client *client = new Client(); |
Program.cpp |
[첨부(Attachment)]
Network-gpp.zip
3. 자바에서의 소켓 프로그래밍
싱글 쓰레드 타입으로 작성함. IPv4 환경에서 확인하였다.
IPv6는 확인하지 못함.
소프트웨어: Eclipse Luna, JDK 1.81
import java.io.BufferedReader; public class ClientSide implements IHost{ |
ClientSide.java |
interface IHost{ public class Host{ |
Host.java |
import java.io.BufferedReader; class ClientWorker implements Runnable{ private int id; this.client = client; try{ try { public class ServerSide implements IHost{ private ServerSocket server; String line; try { // 멀티(Multi-Threading) try{ } |
ServerSide.java |
package Network; public class Example{ |
Example.java |
[예제 - 첨부(Attachment)]
Network.zip
4. IPv4와 IPv6
네트워크와 관련된 주제로 IPv4와 IPv6에 대해서 소개한다.
4-1. IPv4 | ||||||||||||||||||||||||||||
IPv4는 인터넷 프로토콜의 4번째 판이며, 전 세계적으로 사용된 첫 번째 인터넷 프로토콜이다. IPv4는 패킷 교환 네트워크 상에서 데이터를 교환하기 위한 프로토콜이다. 데이터가 정확하게 전달될 것을 보장하지 않고, IPv4의 주소체계는 총 12자리이며 네 부분으로 나뉜다. 각 부분은 0~255까지 3자리의 수로 표현된다. IPv4 주소는 32비트로 구성되어 있으며, 2011년 2월 4일부터 모든 IPv4 주소가 소진되어 IPv4의 할당이 중지되었다. | ||||||||||||||||||||||||||||
그림 4-1-1. 쿼드 점으로 구분 된 IPv4 주소 표현을 이진 값으로 분해. 이건 조금 해결할 수는 있을 듯하다. 다만 이것도 계산이 더럽다고 볼 수 있다.
|
4-2. IPv6 |
인터넷 프로토콜 버전 6 (IPv6)은 네트워크상의 컴퓨터에 대한 식별 및 위치 시스템을 제공하고 인터넷을 통해 트래픽을 라우팅하는 |
그림 4-2-1. IPv6 주소 표현을 이진 형식으로 분해 IPv6를 사람 손으로 푼다고 하면, 매우 많은 노가다가 필요하다. |
4-3. IPv6의 패킷헤더
|
IPv6의 패킷해더이다. IPv6로 데이터를 송수신하면 이런 형태로 전송이 되는 것을 관찰할 수 있다. |
|
[IPv4 to IPv6에 관한 이야기] |
5. 참고자료(Reference)
1. IPv4, Wikipedia, https://ko.wikipedia.org/wiki/IPv4, Accessed by 2018-07-27
2. IPv6, Wikipeida, https://en.wikipedia.org/wiki/IPv6, Accessed by 2018-07-27
3. IPv6 OSPFv3 ESP Packets and Decrypting with Wireshark, https://packetpushers.net/ipv6-ospfv3-esp-packets-and-decrypting-with-wireshark/, Accessed by 2018-07-27
'공부(Study) > 네트워크(Network)' 카테고리의 다른 글
[네트워크(Network)] 스위칭 허브와 랙 그리고 콘솔 작업 (1) | 2018.08.30 |
---|---|
[네트워크(Network)] OSI Layers, DNS, SSL (3) | 2018.07.28 |
[Networks] UTP 케이블 활용 (3) | 2012.10.01 |
[Networks] UTP Cable 제작 실전 (5) | 2009.07.17 |
[Networks] UTP Cable 제작에 필요한 부품 및 툴 (139) | 2009.04.20 |