본문 바로가기

네트워크

(9)
[TCP/IP 소켓 프로그래밍] Winform 을 이용한 채팅 프로그램 - 3 각 클라이언트에서 작성한 메시지를 서버로 보내보는 작업까지 완료해보았다. 이제 조금 더 채팅 프로그램 스럽게 만들 수 있도록 각 클라이언트에서 보낸 메시지를 채팅 창에 띄워주는 작업을 해보자. 서버에서 클라이언트로 메시지 보내기 클라이언트에서 TcpClient 와 NetworkStream 을 이용해서 서버로 메시지를 전송했듯, 서버에서도 마찬가지로 메시지를 클라이언트 단으로 넘겨줄 수 있다. 그러면 일단 서버에서 클라이언트로 메시지를 넘기는 작업을 해보자. public static void RecvMsgFromClient(CLIENT_TYPE ClientType) { while (true) { byte[] Buff = new byte[1024]; int Nbytes; string ReceiveData =..
[TCP/IP 소켓 프로그래밍] Winform 을 이용한 채팅 프로그램 - 2 Winform 채팅 클라이언트 클라이언트 접속하기 UI 까지는 투박하지만 만들어 두었으니, 서버에 접속부터 해보자. 서버에서는 Thread 를 이용해서 모든 클라이언트의 Connect 를 체크해야했지만, 지금 Winform 채팅 프로그램에서 클라이언트에게 서버는 하나이기 때문에 서버에 접속하는것은 그리 어렵지 않다. 다음은 클라이언트의 서버 접속 코드다. public void ConnectToServer() { // (1) IP 주소와 포트를 지정하고 TCP 연결 while (true) { try { Console.WriteLine("Client 연결 요청 중 . . ."); Client = new TcpClient("127.0.0.1", 7000); Thread.Sleep(1000); break; } ..
[TCP/IP 소켓 프로그래밍] Winform 을 이용한 채팅 프로그램 - 1 Winform 채팅 프로그램 컨셉 간단한 클라이언트 - 서버 구조를 살펴보았다. 클라이언트에서 사용자 입력을 받아 NetworkStream 을 이용해서 서버로 보내고 서버에서는 마찬가지로 스트림을 이용해서 메시지를 받아온다. 이번에는 좀 더 멋스럽게 Winform 을 이용해서 아주 간단한 양방향 채팅 프로그램 하나를 만들어보자. 기능자체는 아주 간단한 채팅 시스템을 만들어볼 생각이고 컨셉은 다음과 같다. 1. 서버와 클라이언트가 채팅을 하는것은 약간 이상하니까, 클라이언트 - 클라이언트 로 채팅을 하게끔 구현해보자. 그러면, 클라이언트는 서버로 메시지를 보내고 서버는 받아온 메시지를 다시 다른 클라이언트에게 전달해야한다. 2. 채팅 프로그램을 실행하면 서버에 접속한다. 3. 채팅 가능 시점은 두 클라이언..
[TCP/IP 소켓 프로그래밍] 사용자 입력을 이용한 통신 사용자의 입력을 받고, 이 데이터를 서버로 보내보는 작업을 해보자. 일단 클라이언트, 서버는 이전 포스팅에서 준비해놨으니, 이번에는 사용자 입력만 받아서 서버로 보내보자. 통신 방법 간단하게 사용자 입력을 받아서 변수 하나에 넣어두면 될것 같고, 이 변수를 인코딩을 통해 byte[] 형태로 만들어준뒤, Stream 을 통해 서버로 보내주는 작업이 필요해보인다. public class ClientManager { private static ClientManager clientMngInstance; private TcpClient Client; static public ClientManager Instance() { if(clientMngInstance == null) { clientMngInstance =..
[TCP/IP 소켓 프로그래밍] 서버와 통신하기 클라이언트 준비하기 서버 프로그램 하나, 클라이언트 프로그램 하나를 간단하게 만들어서 가볍게 문자열 정도 주고 받는 프로그램을 만들어보 려 한다. 먼저 클라이언트 쪽 코드를 작성해보자. class Program { static void Main(string[] args) { ClientManager.Instance().ConnectToServer(); } } Program 클래스를 이용해서 ClientManager 클래스 내부의 ConnectToServer() 함수를 호출한다. public void ConnectToServer() { // (1) IP 주소와 포트를 지정하고 TCP 연결 while (true) { try { Console.WriteLine("Client 연결 요청 중 . . ."); Cl..
[TCP/IP 소켓 프로그래밍] TCP 서버 TCP Server 닷넷 프레임워크에서 TCP 서버를 개발하기 위해서는 System.Net.Sockets.TcpListener 클래스가 필요하며, 내부적으로 System.Net.Sockets.Socket 클래스의 기능을 사용해서 TCP Port Listening 기능을 구현한다. Tcp 서버는 TcpListener 클래스의 기능을 이용해서 포트를 열어두고, 클라이언트 측의 접속을 대기하고 있다가, 요청이 들어오면 이를 받아들여서 TcpClient 객체를 생성할 수 있으며 이 TcpClient 객체를 이용해서 NetworkStream 을 통해 클라이언트 측과 통신 할 수 있게 된다. TcpListener 사용법 using System.Net.Sockets; using System.Net; namespace..
[TCP/IP 소켓 프로그래밍] TCP 클라이언트 TCP Client 통신 네트워크 통신은 데이터를 요청하는 PC 와 요청받은 데이터를 처리하는 PC 간의 통신이다. 보통 여기서 데이터를 요청하는 PC 는 클라이언트, 데이터를 처리하는 PC 를 서버라고 지칭한다. 이러한 네트워크 통신의 종류중 TCP 통신이 있으며, 이번에는 간단한 C# 네트워크 예제를 통해 이를 알아보자. namespace TcpCli { class Program { static void Main(string[] args) { // (1) IP 주소와 포트를 지정하고 TCP 연결 TcpClient tc = new TcpClient("127.0.0.1", 7000); //TcpClient tc = new TcpClient("localhost", 7000); string msg = "He..
[TCP/IP 소켓 프로그래밍] IP 주소와 호스트 IP 주소란? IP 주소는 Internet Protocol 의 약자로, 인터넷에 연결된 컴퓨터들을 분류하기 위해 만들어진 주소라고 생각할 수 있다. IP 주소는 IPv4 와 IPv6 로 나뉘는데, IPv4 의 경우 32비트 주소를 사용하며, 이 주소의 숫자가 모자랄 경우를 대비해 IPv6 의 경우 128비트의 주소를 사용한다. DNS 숫자로 이루어진 IP 주소의 경우 사람이 기억하기가 쉽지 않다. 그래서 이 IP 주소를 대신할 이름이 필요하다. 호스트명을 사용해서 해당 IP 주소가 어떤 PC 의 주소인지 알 수 있으며, 인터넷 상에서는 도메인 이름을 사용한다. 예를 들어 www.google.com 을 생각해볼 수 있다. 다만, 호스트 또는 도메인 이름은 단지 이름일 뿐, IP 주소 자체를 의미하지는 않는..