单电脑环境下C#网络编程求助:TCP连接被拒绝
单电脑测试C# TCP文件传输的解决办法
1. 先确保服务端正确启动监听
单电脑测试时,服务端要绑定本地回环地址(127.0.0.1)或监听所有网卡(0.0.0.0),选一个未被占用的端口(比如8888)。以下是最简服务端代码,适合新手快速验证:
using System; using System.Net; using System.Net.Sockets; using System.IO; class TcpFileServer { static void Main() { // 绑定本地回环地址,监听8888端口 TcpListener listener = new TcpListener(IPAddress.Loopback, 8888); listener.Start(); Console.WriteLine("服务端已启动,等待客户端连接..."); // 阻塞等待客户端连接 TcpClient client = listener.AcceptTcpClient(); Console.WriteLine("客户端已连接"); // 接收文件并保存 using (NetworkStream stream = client.GetStream()) using (FileStream fs = new FileStream("received_file.txt", FileMode.Create)) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0) { fs.Write(buffer, 0, bytesRead); } } client.Close(); listener.Stop(); Console.WriteLine("文件接收完成,服务端关闭"); } }
2. 客户端连接对应地址
客户端要和服务端用相同的IP(127.0.0.1)和端口(8888),以下是客户端代码:
using System; using System.Net.Sockets; using System.IO; class TcpFileClient { static void Main() { TcpClient client = new TcpClient(); // 连接本地服务端 client.Connect("127.0.0.1", 8888); Console.WriteLine("已连接到服务端"); // 发送本地的test.txt文件(确保该文件存在) using (NetworkStream stream = client.GetStream()) using (FileStream fs = new FileStream("test.txt", FileMode.Open)) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0) { stream.Write(buffer, 0, bytesRead); } } client.Close(); Console.WriteLine("文件发送完成,客户端关闭"); } }
3. 常见问题排查
- 启动顺序错了:必须先运行服务端,看到“等待客户端连接”的提示后,再启动客户端。先开客户端会直接触发“拒绝连接”。
- 端口被占用:用命令
netstat -ano | findstr :8888检查端口是否被其他程序占用,换个端口(比如8889)重试。 - 防火墙拦截:本地防火墙可能会阻断TCP连接,测试时可以临时关闭防火墙或给程序添加允许规则。
- 文件权限问题:确保服务端保存文件的路径、客户端读取文件的路径都有读写权限,避免隐性错误。
4. 测试步骤
- 编译并运行服务端程序,等待连接提示出现。
- 运行客户端程序,客户端会自动连接服务端并发送文件。
- 完成后检查服务端目录下的
received_file.txt,和客户端的test.txt内容一致即为成功。
内容的提问来源于stack exchange,提问作者Rafin
相关产品推荐
相关产品推荐

