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));
}
}
}
}
}
}
Приведенный выше код выводит одинаковыеданные из каждого сокета.Опять же, когда я получаю доступ к ним через замазку, они разные.