C#.Net应用程序,连接到五个不同的数据流。数据流都采用相同的纯文本格式,但具有来自不同区域的信息。应用程序创建一个自定义对象数组,其中包含套接字。每个套接字连接到其IP /端口(相同的IP,不同的端口)没有问题。但是,当我从每个套接字读取数据时,我从第一个端口号(范围10085-10089)获得相同的数据流。例如,我从连接到10088的套接字读取数据,但是我从10085获取数据。
从数据库中获取IP /端口,因此我删除了除端口10088的所有记录以外的所有内容,因此创建的数组只有一个对象;端口10088只有一个套接字连接。但我仍然只获得10085的数据。
我通过腻子查看了每个端口的数据;数据肯定是不同的。不知道为什么我得到相同的数据,无论套接字连接到哪个端口?
这是一些复制问题的简单代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
namespace MultipleFeedConnectionsTest
{
class Program
{
static void Main(string[] args)
{
Socket[] sockets;
IPAddress ipAddress;
IPAddress currentIP;
int portNumber = 10085;
ipAddress = IPAddress.Parse("xxx.xxx.xxx.xxx"); // changed the IP
currentIP = IPAddress.Parse("192.168.5.122");
sockets = new Socket[5];
for (int counter = 0; counter < 5; counter++)
{
if (counter != 1)
{
sockets[counter] = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sockets[counter].Bind(new IPEndPoint(currentIP, portNumber + counter));
sockets[counter].Connect(new IPEndPoint(ipAddress, portNumber + counter));
}
}
while (true)
{
for (int counter = 0; counter < 5; counter++)
{
if (counter != 1)
{
byte[] receivedData = new byte[255];
NetworkStream stream = new NetworkStream(sockets[counter]);
stream.Read(receivedData, 0, 255);
Console.WriteLine("FEED " + (portNumber + counter));
Console.WriteLine(Encoding.ASCII.GetString(receivedData));
}
}
}
}
}
}
上面的代码从每个套接字输出相同的数据。再次,当我通过腻子访问这些时,它们是不同的。
答案 0 :(得分:1)
尝试了你的代码,它运作得很好。
然而你应该摆脱对套接字[counter] .Bind (........)的调用,因为它与你的代码无关 - 完全没有!! <登记/> 绑定通常在侦听套接字端进行,而不是连接套接字。
无论如何,除了一切看起来都很正常之外 - 我还确保我向每个插座发送一条独特的信息..