首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c# 端口监听有关问题

2012-03-14 
c# 端口监听问题c# 端口监听主要有两重方式:1.TcpListener server new TcpListener(IPAddress.Parse(12

c# 端口监听问题
c# 端口监听主要有两重方式:

1. TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 2000);
  server.Start();  
   
  while(true)
  {
  TcpClient client = server.AcceptTcpClient();//开始监听
  NetworkStream ns = client.GetStream(); //创建网络流,进行读写
  }
   
2. IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), int.Parse("2000"));
  Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  server.Bind(ipep);
  server.Listen(10); 
  while(true)
  {
  Socket client = server.Accept();//开始监听
  NetworkStream ns = new NetworkStream(client);//创建网络流,进行读写
  }

问题:
根据上面两种方式,都会在收取完一次数据包后,断开连接,进行下一次监听时,若有新连接,再创建连接,获取数据包。
我的需求是,能不能实时的监听端口,同时不要频繁的新建连接断开连接?

期待大侠!

[解决办法]
你监听不是实时的吗?

不要频繁的新建连接断开连接? 

不建立连接,这么进行通信呢?

不断开连接,怎么释放占用的资源呢。

当然你可以长连接,那如果有N个连接请求的话,估计到最后无法分配连接资源,后面的新连接根本无法上来。

[解决办法]
udp
[解决办法]
问题:
根据上面两种方式,都会在收取完一次数据包后,断开连接,进行下一次监听时,若有新连接,再创建连接,获取数据包。
我的需求是,能不能实时的监听端口,同时不要频繁的新建连接断开连接?

期待大侠!
==============================
如果你是用的多线程的话,除非你手动断开连接或者客户端断开连接,连接会一直存在。
多线程的逻辑大概如下:

C# code
//初始化TcpListener//启动一个新的线程,假定该线程的目标函数是ThreadATargetFun(object _TcpListener)//线程启动的时候要把TCPListener传递到目标函数中。//在该函数中://先把object强制转换成TCPListener_TcpListener.Start()while(true){    TcpClient ClientTCPClient = _TCPListen.AcceptTcpClient();    Thread ReadClientConnectThread = new Thread(new ParameterizedThreadStart(ReadClientDataThreadFun)); //ReadClientDataThreadFun(object ClientTCPClient)                        ReadClientConnectThread.Start(_tmpdtuclient);//传递该客户端} /// <summary>        /// 接收客户端发送的数据的线程的目标函数        /// </summary>        protected void ReadClientDataThreadFun(object obj)        {              //要增加自己的try、catch模块,判断是否客户端断开连接,或者网络中断等故障              //              //强制转换成TCPClient,获取网络流              while(true)              {                     int _readBytesCount = -1;                    byte[] _receiveBuffer = new byte[512];                    _readBytesCount = _tmpdtuclient.DTUNetworkStream.Read(_receiveBuffer, 0, _receiveBuffer.Length);//如果客户端断开了连接,则read方法会立即返回0                    if (_readBytesCount == 0)                    {                        //客户端退出连接。                        SetMSG("客户端退出连接!客户端信息:" + _tmpdtuclient.DTUTCPClient.Client.RemoteEndPoint.ToString());                        Thread.CurrentThread.Abort();                    }                   //读写网络流              }        }
[解决办法]
C# code
private void StartListen()        [align=left]{            this.TcpListener = new TcpListener(19808);            this.TcpListener.Start();            while( true )            {                TcpClient TcpClient = this.TcpListener.AcceptTcpClient();                NetworkStream MyStream = TcpClient.GetStream();                byte [] bytes = new byte[2048];                int bytesRead = MyStream.Read(bytes,0,bytes.Length);                string message = System.Text.Encoding.UTF8.GetString(bytes,0,bytesRead);            }        }        private void MainForm_Load(object sender, System.EventArgs e)        {            this.Listener = new Thread(new ThreadStart(StartListen));            this.Listener.Start();        }[/align] 


[解决办法]
学习
[解决办法]
这东西太难了 搞不明白

热点排行