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 字符串数据

C# 如何实现服务端发送对象到客户端

.net c# 在网页上客户端如何播放服务器端的wav音频文件 急急急!!!!!!!

Rust编程语言入门之最后的项目:多线程 Web 服务器

使用 python 和 C# 的客户端服务器架构