求 C# 监听端口程序源码。能调试通就行
  C# 一台机器监听一个端口,。这样有 几台机器不停向他固定ip 固定端口传输数据, 
得到数据就行。  最好提供客户端和 服务端 源码谢谢

解决方案 »

  1.   

    string ClientIp = "127.0.0.1";
                listener = new TcpListener(new IPEndPoint(IPAddress.Parse(ClientIp), 8000));    //2222端口
                listener.Start();  //开始侦听端口
                acceptThread = new Thread(new ThreadStart(AcceptWorkThread));
                acceptThread.Start();  //接受客户端请求
    /// <summary>
            /// 接收、解码
            /// </summary>
            private void AcceptWorkThread()
            {
                Socket socket = listener.AcceptSocket();
                byte[] buffer = new byte[1024];
                while (true)
                {
                    int receiveCount = socket.Receive(buffer);
                    if (receiveCount > 0)
                    {
                        string recString = Encoding.UTF8.GetString(buffer, 0, receiveCount);  //解码
                        ShowMsg(recString);
                    }
                    else
                    {
                        socket.Close();
                        break;
                    }
                }
            }
    现在的这个通信没问题,一台客户端连接没问题,但是多台(2台)第二台就不能成功发送数据。
    救命救命救命救命救命救命救命救命救命救命
      

  2.   

    我的理解是一个TCP端口一次只能有一个连接。
    是否可以考虑使用UDPListener
      

  3.   

    UDPListener  能给个 完整的工程吗?
      

  4.   

    接收单播的UDP
    UDPSingleListener ul = new UDPSingleListener ("192.168.1.123","888");
    ul.OnReceiveData += ......................;
    ul.StartListen();
    ul.StopListen();
    ul.Dispose();
        public class UDPSingleListener : IDisposable
        {
            Thread thread;
            bool IsThreadRunning = false;
            int listenPort = 999;
            IPAddress ip = IPAddress.Parse("127.0.0.1");
            UdpClient listener = null;        public UDPSingleListener(string ipaddress, int port)
            {
                listenPort = port;
                ip = IPAddress.Parse(ipaddress);
            }        public void Dispose()
            {
                StopListen();
                ip = null;
                listener = null;
            }        public void StartListen()
            {
                IsThreadRunning = true;
                thread = new Thread(new ThreadStart(Listener));
                thread.Start();
            }        public void StopListen()
            {
                IsThreadRunning = false;
                try
                {
                    if (listener != null)
                    {
                        listener.Close();
                        listener = null;
                    }
                }
                catch
                {
                }
            }        public delegate void ReceiveData(byte[] bytes, string ipaddress, int port);
            public event ReceiveData OnReceiveData;        void Listener()
            {
                try
                {
                    listener = new UdpClient(listenPort, AddressFamily.InterNetwork);                IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, 0);
                    while (IsThreadRunning)
                    {
                        byte[] bytes = listener.Receive(ref groupEP);
                        if (OnReceiveData != null)
                        {
                            OnReceiveData(bytes, groupEP.Address.ToString(), groupEP.Port);
                        }
                    }
                }
                catch  //(Exception err) 
                {
                    //MessageBox.Show(err.ToString());
                    //throw new Exception(err.ToString ());
                }
                finally
                {
                }
            }
        }
      

  5.   

    UDP,TCP都可以。TCP可以建立一个数组,监听到一个就再打开一个监听,端口可相同。
      

  6.   

    你程序有错误吧,循环里把socket.Close(); 了,循环还有效吗?第二次 int receiveCount = socket.Receive(buffer);  如果第一次没有监听到有效连接,还能执行吗?