소년포비의 세계정복!!

C# 소켓통신 예제 소스 본문

프로그램 세상/C#

C# 소켓통신 예제 소스

소년포비 2009. 9. 30. 15:26

/ Server Socket

// NameSpace 선언
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace ServerSideSocket
{
    class ServerClass
    {
        public static Socket Server , Client;
        
        public static byte[] getByte = new byte[1024];
        public static byte[] setByte = new byte[1024];
        
        public const int sPort = 5000;
        
        [STAThread]
        static void Main(string[] args)
        {
            string stringbyte = null;
            IPAddress serverIP = IPAddress.Parse("127.0.0.1");
            IPEndPoint serverEndPoint = new IPEndPoint(serverIP,sPort);
            
          try
          {            
            Server= new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            Server.Bind(serverEndPoint);
            Server.Listen(10);

            Console.WriteLine("-----------------------------------------------------");
            Console.WriteLine(" 클라이언트의 연결을 기다립니다........ ");
            Console.WriteLine("-----------------------------------------------------");
                                    
            Client = Server.Accept();
    
            if(Client.Connected)
            {
                while(true)
                {
                    Client.Receive(getByte,0,getByte.Length,SocketFlags.None);
                    stringbyte = Encoding.UTF7.GetString(getByte);

                    if (stringbyte != String.Empty)
                    {
                      int getValueLength = 0;
                      getValueLength = byteArrayDefrag(getByte);
                      stringbyte = Encoding.UTF7.GetString(getByte,0,getValueLength+1);
                      Console.WriteLine("수신데이터:{0} | 길이:{1}",stringbyte,getValueLength+1);
                      setByte = Encoding.UTF7.GetBytes(stringbyte);
                      Client.Send(setByte,0,setByte.Length,SocketFlags.None);
                    }
                    
                    getByte = new byte[1024];
                    setByte = new byte[1024];
                }
            }
          }
          catch(System.Net.Sockets.SocketException socketEx)
          {
            Console.WriteLine("[Error]:{0}", socketEx.Message);
          }
          catch(System.Exception commonEx)
          {
            Console.WriteLine("[Error]:{0}", commonEx.Message);
          }
          finally
          {
            Server.Close();
            Client.Close();
          }
        }
        
        public static int byteArrayDefrag(byte[] sData)
        {
          int endLength = 0;
          
          for(int i = 0; i < sData.Length; i++)
          {
            if((byte)sData[i] != (byte)0)
            {
              endLength = i;
            }
          }
          
          return endLength;
        }
    }
}


// Client Socket

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

namespace ClientSideSocket
{
    class ClientClass
    {
        public static Socket socket;
        public static byte[] getbyte = new byte[1024];
        public static byte[] setbyte = new byte[1024];

        public const int sPort = 5000;

        [STAThread]
        static void Main(string[] args)
        {
            string sendstring = null;
            string getstring = null;

            IPAddress serverIP = IPAddress.Parse("127.0.0.1");
            IPEndPoint serverEndPoint = new IPEndPoint(serverIP,sPort);

            socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            Console.WriteLine("-----------------------------------------------------");
            Console.WriteLine(" 서버로 접속을 시작합니다. [엔터를 입력하세요] ");
            Console.WriteLine("-----------------------------------------------------");
            Console.ReadLine();

            socket.Connect(serverEndPoint);

            if (socket.Connected)
            {
                Console.WriteLine(">> 정상적으로 연결 되었습니다.(전송한 데이터를 입력해주세요)");
            }

            while(true)
            {
                Console.Write(">>");
                sendstring = Console.ReadLine();
                
                if(sendstring != String.Empty)
                {
                  int getValueLength = 0;
                  setbyte = Encoding.UTF7.GetBytes(sendstring);
                  socket.Send(setbyte,0,setbyte.Length,SocketFlags.None);
                  Console.WriteLine("송신 데이터 : {0} | 길이{1}", sendstring, setbyte.Length);
                  socket.Receive(getbyte,0,getbyte.Length,SocketFlags.None);
                  getValueLength = byteArrayDefrag(getbyte);
                  getstring = Encoding.UTF7.GetString(getbyte,0,getValueLength+1);
                  Console.WriteLine(">>수신된 데이터 :{0} | 길이{1}" , getstring , getValueLength+1);
                }
                
                getbyte = new byte[1024];
             }
        }
        
        public static int byteArrayDefrag(byte[] sData)
        {
          int endLength = 0;
          
          for(int i = 0; i < sData.Length; i++)
          {
            if((byte)sData[i] != (byte)0)
            {
              endLength = i;
            }
          }
          
          return endLength;
        }
    }
}

'프로그램 세상 > C#' 카테고리의 다른 글

Process Kill 하기  (0) 2009.10.02
C# 원격 네트워크 드라이브 연결  (0) 2009.10.02
DataColumn 관련  (0) 2009.09.28
VS2008로 작성한 C#프로젝트를 VS2005에서 열기  (0) 2009.09.27
키보드 활성화 및 비활성화  (0) 2009.09.27