CHOU
[MSRDS] TCP/IP protocol 통신 알아보기 본문
이번주에 수업도 꽤 많았고 숙제가 몰려 있어서 한동안 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)