CHOU

[MSRDS] TCP/IP protocol 통신 알아보기 본문

Tech/Microsoft Products

[MSRDS] TCP/IP protocol 통신 알아보기

chobabo 2009. 5. 1. 22:19

 이번주에 수업도 꽤 많았고 숙제가 몰려 있어서 한동안 MSRDS 공부를 못하다가 오늘부터 일본은 Golden Week 라는 무지 긴 연휴가 시작되서 오늘은 꽤 늦게까지 밀린 여러가지 일을 하고 있습니다 ㅋㅋㅋ. Pioneer 로봇과 통신하기 위해서는 적절한 통신 방식이 필요한데.. 현재 연구실에 있는 장비를 효과적으로 이용하려면 아무래도 TCP/IP 가 좋겠다는 생각을 해 보았습니다. C# 에서 TCP/IP 통신을 하는 방법은 인터넷에 굉장히 잘 설명되어 있어서 다행이도 공부하는데 무리가 없었습니다^^;

소설같은 C# 에서 발췌한 Server 와 Client 의 기본 소스 입니다.

1. Server

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

public class TcpDateTimeServer
{
    public static void Main()
    {
        IPAddress ipAddress = Dns.GetHostEntry("localhost").AddressList[0];
        TcpListener listener = new TcpListener(ipAddress, 3000);
        listener.Start();

        Console.WriteLine("1. DateTime Server ...");

        while (true)
        {
            TcpClient client = listener.AcceptTcpClient();           
            NetworkStream ns = client.GetStream();
            //Socket socket = listener.AcceptSocket();

            Console.WriteLine("2. 3000.. client to connection!");
           
            DateTime now = DateTime.Now;

            byte[] byteTime = Encoding.Default.GetBytes(now.ToString());

            try
            {
                Console.WriteLine("3. client to current time transration:" + now);

                ns.Write(byteTime, 0, byteTime.Length);
                ns.Close();

                //socket.Send(byteTime, byteTime.Length, 0);
                //socket.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                break;
            }
        }
        listener.Stop();
    }
}


2. Client

using System;
using System.Net.Sockets;
using System.Text;

public class TcpDateTimeClient
{
    public static int Main(String[] args)
    {
        try
        {
            TcpClient client = new TcpClient("localhost", 3000);
            NetworkStream ns = client.GetStream();

            byte[] bytes = new byte[1024];
            int bytesRead = ns.Read(bytes, 0, bytes.Length);
            Console.WriteLine(Encoding.Default.GetString(bytes, 0, bytesRead));

            client.Close();
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }
        return 0;
    }
}



 위에 소스는 인터넷에 소설같은 C# 이라고 검색하면 나오는 소스인데 간결하면서도 전반적인 통신을 이해하기 정말 쉽게 나온거 같습니다.

위의 코드를 입력하고 컴파일을 한다음 Server 와  Client를 실행하면 아래와 같은 화면이 나옵니다.





 서버는 클라이언트를 기다리고 있다가 클라이언트가 접속하게되면 접속 성공 여부를 출력해주고 현재 클라이언트에게 파일을 전송한 시간을 출력하는 코드 입니다. 자신의 구미에 맞게 적절하게 변환하면 될 듯 싶습니다. 정말 간결하면서도 훌륭한 코드입니다. 아무쪼록 코드를 제공해주신 분께 감사드릴 뿐 입니다^^.

 아래의 주소를 클릭하시면 C#에서 TCP/IP 통신을 하는 방법에 대해 아주 자세하게 나와 있습니다. 가끔 생각해 보는건데.. 이런 내용을 저렇게 자세히 올리시는 분들보면 참 대단하다는 생각이 듭니다. 정말 감사한 일입니다.

http://synch3d.com/wiki/moin/moin.cgi/Network_20with_20C_23#line607 


 골든위크를 이용해서 통신연결하는거하고 모터 서비스를 붙여서 다음주 정도에 실제 구동해 봐야겠습니다. 현재는 TCP/IP 따로 모터 서비스 따로 구현해 놓아서 약간 불편하고 실용성이 부족한데 약간 세밀하게 만들어 봐야겠습니다.


Reference

1.Code Zip file(Visual Studio 2008)