C# 单客户端 多服务器同时收发数据

需要用C#编写TCP协议的客户端接收两个服务器传过来的文件。使用了两个Socket连接两个服务器,每一个socket都有一个单独的接收线程recmsg,多线程+阻塞模式。

现在的问题是两个服务器有可能会在同一时刻向客户端发送文件,客户端同一IP地址下从不同端口同时接收到了文件。这种情况下是否会出现冲突的情况,客户端无法判断优先从哪个端口接收数据?
如果会有冲突,那么应该采用何种方式解决这种客户端同时接收到文件的情况?

部分代码如下

private void Form1_Load(object sender, EventArgs e)
{
socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

  1. IPEndPoint ipe = new IPEndPoint(IPAddress.Parse("192.168.2.100"), 7890);

  2. socketClient.Connect(ipe);

  3. threadClient = new Thread(RecMsg);

  4. threadClient.IsBackground = true;

  5. threadClient.Start();

  6. Message.AppendText("已经与服务端100建立连接,可以开始通信...\r\n");

  7. socketClient2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

  8. IPEndPoint ipe2 = new IPEndPoint(IPAddress.Parse("192.168.2.110"), 7890);

  9. socketClient2.Connect(ipe2);

  10. threadClient2 = new Thread(RecMs);

  11. threadClient2.IsBackground = true;

  12. threadClient2.Start();

  13. Message.AppendText("已经与服务端110建立连接,可以开始通信...\r\n");

  14. (292条消息) C# 单客户端 多服务器同时收发数据-微软技术-CSDN问答

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基本的C#聊天和文件传输软件的服务端和客户端示例代码: 服务端: ```csharp using System; using System.IO; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; namespace ChatServer { class Program { static TcpListener listener; static void Main(string[] args) { listener = new TcpListener(IPAddress.Any, 8888); listener.Start(); Console.WriteLine("服务器已启动,等待客户端连接..."); while (true) { TcpClient client = listener.AcceptTcpClient(); Thread t = new Thread(new ParameterizedThreadStart(HandleClient)); t.Start(client); } } static void HandleClient(object obj) { TcpClient client = (TcpClient)obj; Console.WriteLine("客户端已连接:" + client.Client.RemoteEndPoint.ToString()); NetworkStream stream = client.GetStream(); byte[] buffer = new byte[1024]; int bytesRead; while (true) { bytesRead = 0; try { bytesRead = stream.Read(buffer, 0, 1024); } catch { break; } if (bytesRead == 0) { break; } string message = Encoding.UTF8.GetString(buffer, 0, bytesRead); Console.WriteLine("收到消息:" + message); byte[] data = Encoding.UTF8.GetBytes("收到消息:" + message); stream.Write(data, 0, data.Length); } client.Close(); Console.WriteLine("客户端已断开连接:" + client.Client.RemoteEndPoint.ToString()); } } } ``` 客户端: ```csharp using System; using System.IO; using System.Net; using System.Net.Sockets; using System.Text; namespace ChatClient { class Program { static TcpClient client; static void Main(string[] args) { Console.WriteLine("请输入服务器IP地址:"); string ip = Console.ReadLine(); Console.WriteLine("请输入服务器端口号:"); int port = int.Parse(Console.ReadLine()); client = new TcpClient(); client.Connect(IPAddress.Parse(ip), port); Console.WriteLine("已连接服务器:" + client.Client.RemoteEndPoint.ToString()); while (true) { Console.WriteLine("请输入要发送的消息:"); string message = Console.ReadLine(); byte[] data = Encoding.UTF8.GetBytes(message); NetworkStream stream = client.GetStream(); stream.Write(data, 0, data.Length); data = new byte[1024]; string responseData = string.Empty; int bytes = stream.Read(data, 0, data.Length); responseData = Encoding.UTF8.GetString(data, 0, bytes); Console.WriteLine(responseData); } client.Close(); } } } ``` 这段代码实现了一个基本的聊天功能,当客户端发送消息时,服务端会将其输出并回复客户端“收到消息:XXX”。 若要实现文件传输功能,需要在代码中添加相应的逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值