2010/08/14 - [C#/Tip] - C# 네트워크(Network) TCP 클라이언트 만들어보기
서버 <-> 클라이언트 통신(TCP)를 한번 작성해봤습니다.
어렵진 않으니 한번 읽어보시면 될거 같네요..
연결 부분은 아래와 같이 코딩하였습니다.
IPEndPoint에 대한 MSDN으 설명을 보게되면 아래와 같은 설명이 있습니다.
저도 처음 C#에서 네트워크 코딩을할 때 이게 잘 이해안되던 부분이었는데요.
알고 넘어 가는게 좋겠죠?ㅎ..
Sorket클레스로 만들어진 server의 Bind메소드를 활용해서 IPEndPoint를 지정해줍니다.아래처럼
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9999);
여기서 또 Bind에 대한 MSDN의 설명을 보게 되면 아래와 같은 설명이 있습니다.
Bind를 활용해서 로컬 끝점과 연결을 합니다.
server.Bind(ipep);
그냥 위의 IPEndPoint를따로 생성하지 않고 이렇게 바로 하셔도 상관은 없습니다.
server.Bind(new IPEndPoint(IPAddress.Any, 9999));
다음은 Listen메서드로 수신대기 상태를 만들어야 하는데 아래와 같은 구문을 사용합니다.
public void Listen (int backlog)
int backlog는 한번에 접속할 수 있는 클라이언트 수를 뜻합니다.
Listen(5) 라고 했을 경우 5개의 클라이언트가 동시접속 가능하다는 뜻입니다.
Listen으로 수신대기 상태에 들어가게되면 클라이언트에서 연결 요청이 들어오게 되면
Socket클레스로 연결된 클라이언트를 반환하게 됩니다.
반환된 Socket클레스를 통해서보내고자 하는 데이터(byte) 또는 string을 보내게됩니다.
C#에서 네트워킹 서버는 위와 같은 단계로 진행되게 됩니다.
아래는 위의 설명을 코드로 나타내어 봤습니다. 구분하기 쉽게 메서드를 작성해봤는데 더 어지러운거 같기도 하고..그렇네요..^^;
04 | private Socket server; |
05 | private Socket client; |
07 | private void ServerOpen() |
10 | server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); |
11 | IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9999); |
15 | Console.WriteLine( "클라이언트 연결을 대기합니다." ); |
17 | client = server.Accept(); |
19 | for ( int i = 0; i < 10; i++) |
21 | Console.Write( "클라이언트로 보낼 내용은 ==> " ); |
22 | string str = Console.ReadLine(); |
27 | private void Writer( string str) |
29 | NetworkStream stream = new NetworkStream(client); |
30 | StreamWriter writer = new StreamWriter(stream); |
32 | writer.WriteLine(str); |
37 | static void Main( string [] args) |
39 | NetworkTest networktest = new NetworkTest(); |
41 | networktest.ServerOpen(); |