C\#Socket 통신 의 실현(다 중 클 라 이언 트 를 동시에 감청)

코드 봐~

 //  socket  
            //     :         、             、           
            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //2.  IP  
            string str = "127.0.0.1";
            int ports = 55555;
            IPAddress ip = IPAddress.Parse(str);
            IPEndPoint ipENdpoint = new IPEndPoint(ip, ports);
 
            serverSocket.Bind(ipENdpoint);
            //3.    
            serverSocket.Listen(10);
            label5_Timer.Text = "    ・・・";
 
            //4.          
            ThreadPool.QueueUserWorkItem(new WaitCallback(this.StartAcceptClient), serverSocket); 
        }
        public void StartAcceptClient(object state)
        {
            var serverSocket = (Socket)state;
            this.AppendTextLog("             ");
            while (true)
            {
                try
                {
                    Socket prosock = serverSocket.Accept();
                    //          IP   socket     
                    dicSocket.Add(prosock.RemoteEndPoint.ToString(), prosock);
                    string ipPort = prosock.RemoteEndPoint.ToString();
                    MedicineDevice ns = new MedicineDevice();
                    SQLMachine j = new SQLMachine();                   
 
                    j.MedicineDeviceStatus(ipPort, "  ");
                    //       
                    string stinfo = prosock.RemoteEndPoint.ToString();
                    this.AppendTextLog(string.Format("   {0}    ", stinfo));
 
                    ClientProSocketList.Add(prosock);
                    //           
                    ThreadPool.QueueUserWorkItem(new WaitCallback(this.ReceiveData), prosock);
                }
                catch (Exception e)
                {
                    return;
                    //throw;
                } 
            }

 public void ReceiveData(object obj)
        {
            var prosock = (Socket)obj;
            byte[] data = new byte[1024 * 1024];
            //                
            while (true)
            {
                int realen = 0;
                try
                {
                    realen = prosock.Receive(data, 0, data.Length, SocketFlags.None);
                }
                catch (Exception e)
                {
                    //    
                    AppendTextLog(string.Format("   {0}     ", prosock.RemoteEndPoint.ToString()));                  
                    StopCOnnecte(prosock);
                    return;
                }
                if (realen <= 0)
                {
                    //      
 
                    AppendTextLog(string.Format("   {0}     :", prosock.RemoteEndPoint.ToString()));             
                    }
                    prosock.Shutdown(SocketShutdown.Both);
                    prosock.Close();
                    ClientProSocketList.Remove(prosock);
                    return;
                }
                //      
                string fromClientMsg = Encoding.Default.GetString(data, 0, realen);
                AppendTextLog(string.Format("    {0}     :{1}", prosock.RemoteEndPoint.ToString(), fromClientMsg));}}
  private void StopCOnnecte(Socket prosock)
        {
            try
            {
                if (prosock.Connected)
                {
                    prosock.Shutdown(SocketShutdown.Both);
                    prosock.Close(100);
                }
            }
            catch (Exception ex)
            { 
            }
        }
 public void AppendTextLog(string txt)
        {
            if (textBox_Message.InvokeRequired)
            {
                textBox_Message.BeginInvoke(new Action<string>(s =>
                {
                    this.textBox_Message.Text = string.Format("{0}\r
{1}", s, textBox_Message.Text); } ), txt); // //textBox_Message.Invoke(new Action<string>(s => // { // this.textBox_Message.Text = string.Format("{0}\r
{1}", s, textBox_Message.Text); // } // ), txt); } else { this.textBox_Message.Text = string.Format("{0}\r
{1}", txt, textBox_Message.Text); } } // '{' '}'
C\#Socket 의 Listen 감청 방법
코드 봐~

 _serverSocket.Listen(10);
  public void Listen(int backlog);
Listen 방법의 전체 매개 변 수 는 연결 을 기다 리 는 최대 수량 을 표시 합 니 다.이 수량 은 연 결 된 수량 을 포함 하지 않 습 니 다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기