예제 #1
0
 //等待客户端连接
 private void WaiForData(Socket worksocket, int clientNumber)
 {
     try
     {
         if (pfnWorkerCallBack == null)
         {
             //指定回调函数被调用,当被连接的客户端有任何写入活动时
             pfnWorkerCallBack = new AsyncCallback(OnDataReveiced);
         }
         Socketpacket theSocket = new Socketpacket(worksocket, clientNumber);
         worksocket.BeginReceive(theSocket.databuffer, 0, theSocket.databuffer.Length, SocketFlags.None, pfnWorkerCallBack, theSocket);
     }
     catch (SocketException se)
     {
         MessageBox.Show(se.Message);
     }
 }
예제 #2
0
        private void OnDataReveiced(IAsyncResult ar)
        {
            Socketpacket socketpacket = (Socketpacket)ar.AsyncState;
            string       ip           = "";

            if (socketpacket != null && !flag)
            {
                ip = (socketpacket.currentsocket.RemoteEndPoint as IPEndPoint).Address.ToString();
            }
            try
            {
                int     irx     = socketpacket.currentsocket.EndReceive(ar);
                char[]  chars   = new char[irx + 1];
                Decoder d       = UTF8Encoding.UTF8.GetDecoder();
                int     charlen = d.GetChars(socketpacket.databuffer, 0, irx, chars, 0);

                String sdata = new String(chars);
                sdata = sdata.Replace("\0", "");
                string msg = "" + ip + ":";
                AppendToRichEditControl(msg + "\r\n" + sdata);

                if (txt_ConnectNum.Text != "")
                {
                    if (clientcount == int.Parse(txt_ConnectNum.Text))
                    {
                        string msgTime = "Server End Socket Action Time:";
                        lock (this)
                        {
                            stopwatch.Stop();
                            //lblTime.Text = stopwatch.Elapsed.Seconds.ToString();
                            int itime = stopwatch.Elapsed.Milliseconds;

                            //msgTime += stopwatch.Elapsed.Seconds.ToString()+"--"+itime.ToString();
                            msgTime += DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff");
                        }
                        writeLog(msgTime);
                        writeLog();
                        lbl_Time.Text = msgTime;
                    }
                }

                WaiForData(socketpacket.currentsocket, socketpacket.ClientNumber);
            }
            catch (ObjectDisposedException)
            {
                Debugger.Log(0, "1", "\nOnDataReceived: Socket has been closed\n");
            }
            catch (SocketException se)
            {
                if (se.ErrorCode == 10054)
                {
                    string msg = "Client:" + ip + " Disconnected" + "\n";
                    AppendToRichEditControl(msg);
                    workSocketList[socketpacket.ClientNumber - 1] = null;
                    //更新连接信息框
                    UpdateClientListControl();
                }
                else
                {
                    MessageBox.Show(se.Message);
                }
            }
        }