본문 바로가기

Server Story..../c#

c# 소켓통신 예제.

/ 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);
static byte[] getByte = new byte[1024];
            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; 
        }
    }
}




이내용은  http://blog.daum.net/_blog/BlogTypeView.do?blogid=0OYkw&articleno=46&categoryId=2&regdt=20090930152633#ajax_history_home  여기서 퍼옴.


'Server Story.... > c#' 카테고리의 다른 글

windows command iis ftp 명령어,  (0) 2012.01.18
c# windows Service 등록 방법  (0) 2012.01.03
c# app.config 파일에 저장 및 읽기  (0) 2011.11.25