![]() |
1
1
调用Start()的TcpListener侦听传入连接,然后将它们堆栈到队列中。一旦队列满了,就会产生套接字异常。要从队列中删除连接,您需要使用 AcceptTcpClient AcceptSocket TcpListener方法。然后,这将为您提供一个可以在其上发送和接收数据的连接。
有一个重载方法。。。 TcpListener.Start(int backlog) ... 它允许您设置挂起队列列表的大小(这样您就可以有5、10个或更多的连接等待TcpListener接受) 对于服务器TCP套接字,过程是设置它监听本地地址和端口。然后客户端尝试连接到该端点。当它们连接时,TCP侦听套接字接受连接,然后将其传递给一个套接字,该套接字是传输数据的套接字。侦听套接字继续侦听新连接,它本身不传输数据。 我希望这有意义?
如果您希望避免阻塞场景,可以使用 TcpListener.Pending() 查看队列中是否有任何连接正在等待 编辑1:
就我个人而言,我会将服务器的监听方面与数据的发送和接收分开。。。使用它自己的独立方法,毕竟您希望您的服务器监听传入的连接,直到您关闭它。当您检测到一个传入连接(可能是通过检查循环中的Pending())时,就可以接受它并在新的TcpClient上发送和接收。当你完成了你在那个客户机上发送/接收的任何数据,你可以关闭它,如果这是你想要的。。。你不需要每次发送消息时都关闭和打开一个tcp连接,你可以让它一直打开,直到你完成它,事实上,打开和关闭tcp连接会在握手协议中产生一些开销。 不过,也有一些警告。。。Tcp连接可能会变得“半开放”,尤其是无线连接可能会导致问题。进入这里有点复杂,但我推荐这一系列优秀的文章 Stephen Cleary 作为一个很好的通读。阅读整个博客,因为里面有很多好的信息。 所以,简单地说,我会。。。
通常情况下,流量是。。。
|
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |