C# 在客户端和服务器上使用 TcpListener
Posted
技术标签:
【中文标题】C# 在客户端和服务器上使用 TcpListener【英文标题】:C# Using TcpListener on both Client and Server 【发布时间】:2017-06-14 20:51:02 【问题描述】:我跟着this tutorial 设置了一个客户端 -> 服务器基于 TCP 的 Windows 窗体应用程序,服务器从客户端接收文件,它运行良好。结构的总结是:
服务器使用TcpListener来监听
客户端使用TcpClient发送
现在我试图通过将文件从服务器发送到客户端来做相反的事情,使用相同的方法。我尝试了以下结构:
服务器使用TcpClient发送
客户端使用TcpListener来监听
但是我得到以下错误:
每个套接字地址(协议/网络地址/端口)通常只允许使用一次
这是因为客户端和服务器正在侦听错误描述的同一端口吗?我还能如何双向发送和接收文件?
我的代码是我链接的那个帖子中发布的确切代码,因此我没有在这里发布。如果我也应该在这里发布我的代码,请告诉我:)
【问题讨论】:
通常在客户端使用 TcpListener 不是一个好主意,因为它可能很难从服务器(防火墙、NAT 等)读取客户端。你到底想做什么?也许客户端可以先请求该文件,然后服务器将其作为响应发送? 我正在尝试将文件从服务器发送到客户端@Evk 我已经实现了将文件从客户端发送到服务器的功能。我也需要反其道而行之,以实现双向沟通 我的意思是客户端可能首先请求该文件(向服务器发送一些内容,这意味着“给我文件 X”),然后服务器将发送该文件作为响应(通过同一通道)。 Tcp 已经是双向通信,因此您不需要单独的通道。 【参考方案1】:正如其他人评论的那样,您尝试做的不是一个好主意,而是回答您的问题:
这个错误是不言自明的。您正在尝试使用已在使用的端口号。因此,只需使用不同的端口号。 (教程中的PortN
参数。)换句话说,让一对TcpListener和TcpClient通过端口X通信,另一对(反向)通过端口X+1通信。
【讨论】:
以上是关于C# 在客户端和服务器上使用 TcpListener的主要内容,如果未能解决你的问题,请参考以下文章
c# WinServices 使用 Logindata 在窗口服务上运行程序
通过 Web Socket 网络在 C# 服务器上传输 JSON 字符串数据