Сокет .Net не транслируется с правильного порта? - PullRequest
0 голосов
/ 03 ноября 2010

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));
                }
            }
        }
    }
}
    }

Приведенный выше код выводит одинаковыеданные из каждого сокета.Опять же, когда я получаю доступ к ним через замазку, они разные.

1 Ответ

1 голос
/ 03 ноября 2010

Пробовал ваш код, и он работает просто отлично.

Однако вы должны избавиться от вызова сокетов [counter] .Bind (........), потому что это не имеет никакого отношения к вашему коду - вообще !!
Связывание обычно выполняется на стороне прослушивающего разъема, а не на соединительном.

В любом случае, кроме того, что все выглядит нормально - я также убедился, что отправляю уникальное сообщение в каждый сокет ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...