Contents

Develop
2013.04.23 17:33

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

조회 수 26694 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
// 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; 
    }
  }
}


?

  1. [android] 디바이스(시뮬레이터) hosts 파일 수정하기

    Date2013.04.23 CategoryDevelop Byhooni Views31077
    Read More
  2. 서기의 PHP 동영상 강의(싱싱해)

    Date2013.05.15 CategoryDevelop Byhooni Views30982
    Read More
  3. 성문 종합 영어 정리된 pdf 파일

    Date2013.06.25 CategoryEtc Byhooni Views30969
    Read More
  4. [mac] 맥에서 슬립(잠자기) 모드 진입을 막는 방법~

    Date2013.10.10 CategorySystem/OS Byhooni Views30888
    Read More
  5. [linux] 특정 문자열 포함된 파일 찾는 명령어

    Date2013.10.16 CategorySystem/OS Byhooni Views30618
    Read More
  6. 영작 연습을 위한 실용영어 문장 1001개 (1~500)

    Date2013.06.21 CategoryEtc Byhooni Views30428
    Read More
  7. [js] 웹페이지에서 특정 엘리먼트 드래그, 복사, 컨텍스트메뉴, 키보드 막기

    Date2013.11.04 CategoryDevelop Byhooni Views30063
    Read More
  8. [linux] 랜카드가 2개 일 때 네트워크 설정

    Date2003.04.23 CategorySystem/OS Byhooni Views30034
    Read More
  9. [ios] 테이블뷰셀/뷰에 배경 패턴 넣기..

    Date2013.04.23 CategoryDevelop Byhooni Views29815
    Read More
  10. 맥북에서 MAC/윈도우 멀티부팅시 시간 설정

    Date2013.04.23 CategorySystem/OS Byhooni Views29764
    Read More
  11. [ios] iCloud관련 저장 디렉토리

    Date2013.04.23 CategoryDevelop Byhooni Views29637
    Read More
  12. [mac] OSX(맥) 단축키 설명 ㅎㅎ

    Date2013.04.23 CategorySystem/OS Byhooni Views29571
    Read More
Board Pagination Prev 1 ... 3 4 5 6 7 8 9 10 11 12 ... 98 Next
/ 98