Contents

Develop
2013.04.23 17:33

[c#] 간단한 소켓통신 예제..

Views 26690 Comment 0
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
// 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; 
    }
  }
}


?

List of Articles
No. Category Subject Author Date Views
769 Develop [ios] 로컬에 있는 JS 파일 웹뷰에서 동적으로 실행하기 hooni 2015.02.10 947
768 Develop [ios] 상위 ViewController 가져오기 hooni 2015.10.12 953
767 Develop [ios] 오브젝티브C→스위프트, 코드 변환 손쉽게 file hooni 2015.08.07 955
766 Develop [ios] APNS, Remote Push 수신 시점에서 앱의 3가지 실행 상태 hooni 2018.10.19 965
765 Develop '2014 모바일 개발 트렌드' 발표자료입니다. file hooni 2014.10.02 976
764 Develop [ios] Xcode의 디버그 모드에서 콜스택 file hooni 2015.01.03 997
763 Develop [js] 스크롤 이벤트 막기 hooni 2015.04.14 1007
762 Develop [c] FSN 온라인 코딩 테스트 (Sorting, Binary Search) file hooni 2015.06.26 1011
761 Develop [ios] Did UIScrollView End Scrolling? hooni 2016.04.19 1017
760 Develop [ios] 로컬에 있는 html 실행하기 hooni 2015.02.10 1026
759 Develop [ios] 최상위 ViewController 가져오기 hooni 2015.10.12 1059
758 Develop [ios] StoryBoard(xib) 없이 프로젝트 만들기 file hooni 2015.02.12 1063
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 ... 71 Next
/ 71