.Net Socket无法从正确的端口流式传输?

时间:2010-11-02 21:23:20

标签: c# sockets

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 个答案:

答案 0 :(得分:1)

尝试了你的代码,它运作得很好。

然而你应该摆脱对套接字[counter] .Bind (........)的调用,因为它与你的代码无关 - 完全没有!! <登记/> 绑定通常在侦听套接字端进行,而不是连接套接字。

无论如何,除了一切看起来都很正常之外 - 我还确保我向每个插座发送一条独特的信息..