C# Socket程序在C语言实时系统中的应用

C# Socket程序在C语言实时系统中的应用,c#,xsockets.net,C#,Xsockets.net,我对客户机和服务器应用程序感兴趣。顺便说一下,我正在做实时项目。我遇到了一系列的问题,我想不出来。你能帮我了解一下这个软件吗。让我在下面解释一下我的项目 我的项目由两部分组成。其中一个是客户端,另一个是服务器。路由器上有一个设备。我正在尝试通过以太网连接此设备。我可以通过设备的Ipnumber和端口号(172.16.204.10050007)连接到设备,并且我可以发送数据命令 CLIENT PART namespace client { class Program

我对客户机和服务器应用程序感兴趣。顺便说一下,我正在做实时项目。我遇到了一系列的问题,我想不出来。你能帮我了解一下这个软件吗。让我在下面解释一下我的项目

我的项目由两部分组成。其中一个是客户端,另一个是服务器。路由器上有一个设备。我正在尝试通过以太网连接此设备。我可以通过设备的Ipnumber和端口号(172.16.204.10050007)连接到设备,并且我可以发送数据命令

  CLIENT PART


  namespace client
   {
     class Program
   {
    static Socket sck;
    //static byte[] Buffer { get; set; }

    static void Main(string[] args)
    {
        Console.Title = "rrrrrr";
        sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        IPEndPoint localendpoint = new IPEndPoint(IPAddress.Parse("172.16.204.100"), 50007); //50007  bidirectional interface The event 
        //channel is unidirectional and connects across port 50008.The event channel reports asynchronous events such as errors, tag arrivals, and digital output triggers. 

        try
        {
            sck.Connect(localendpoint);

            if (sck.Poll(-1, SelectMode.SelectWrite))
            {
                Console.WriteLine("this socket is writable");
            }
            else if (sck.Poll(-1, SelectMode.SelectRead))
            {
                Console.WriteLine("this socket is readable");
            }
            else if (sck.Poll(-1, SelectMode.SelectError))
            {
                Console.WriteLine("this socket has an error");
            }
        }
        catch
        {
            Console.Write(" unable ");
            Main(args);
        }

        Console.Write(" \r\n ");
        // Using the RemoteEndPoint property.
        Console.WriteLine("I am connected to " + IPAddress.Parse(((IPEndPoint)sck.RemoteEndPoint).Address.ToString()) + " on port number " + ((IPEndPoint)sck.RemoteEndPoint).Port.ToString());
        Console.Write(" \r\n ");

        // Using the LocalEndPoint property.
        Console.WriteLine("My local IpAddress is :" + IPAddress.Parse(((IPEndPoint)sck.LocalEndPoint).Address.ToString()) + " I am connected on port number " + ((IPEndPoint)sck.LocalEndPoint).Port.ToString());
        Console.Write(" \r\n ");

        Console.Write("enter text:  ");
        string text = Console.ReadLine();
        byte[] data = Encoding.ASCII.GetBytes(text);

        sck.Send(data);
        Console.Write(" data sent! \r\n   ");
        //Console.Write(" press ant key to continue  ");

        Console.Read();
        sck.Close();

    }
}
}

然后,我编写了我的计算机的Ipnumber,用于在绑定方法中建立设备和我的计算机之间的连接。我开始等待回应。在这一点上,我从来没有得到一个答案。我认为我的端口号应该是错误的,这可能会导致问题。我不知道到底是什么问题。我只知道我不能得到任何回应

顺便说一下,我刚刚学习这个平台将近15天了。我不专业。我真的为这项工作遇到了麻烦

你能帮我吗?如果有人能帮助我,我会很高兴见到他

   SERVER PART

   namespace server
   {


    class Program
    {

    static byte[] Buffer { get; set; }
    static Socket sck;

    static void Main(string[] args)
    {
        Console.Title = " Server ";
        sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        sck.Bind(new IPEndPoint(IPAddress.Parse("172.16.204.104"), 4561));

        //sck.Bind(new IPEndPoint(IPAddress.Parse("172.16.204.104"), 0));

        while (true)
        {
            sck.Listen(100);
            Socket accepted = sck.Accept();
            Buffer = new byte[accepted.SendBufferSize];
            int bytesRead = accepted.Receive(Buffer);
            byte[] formatted = new byte[bytesRead];

            for (int i = 0; i < bytesRead; i++)
            {
                formatted[i] = Buffer[i];
            }
            string strData = Encoding.ASCII.GetString(formatted);
            Console.Write(strData + "\r\n");
            Console.Read();
            sck.Close();
            accepted.Close();
        }

    }
}

}

您应该更改客户端试图连接到4561的端口号。因为您的服务器正在侦听4561。因此,将Localendpoint的端口号从5007更改为4561

我希望您已经理解localendpoint表示您的服务器,而不是客户端


另外,如果您正试图通过5007连接到中间设备,那么您的服务器显然不会收到任何东西,除非该设备将数据重定向到4561处的服务器。

为什么您的服务器侦听端口4561,而客户端试图连接到端口50007?您好,50007是我设备的sencron端口。4561只是选择了在我的计算机中监听的任何端口。实际上我在这一点上感到困惑。若你们看下一行,你们会看到我选择0作为端口号。我不确定我应该为portSo做些什么,你有一个设备、一个C客户端应用程序和一个C服务器应用程序吗?三个端点?在我看来,端口号为0的那一行被注释掉了。顺便说一句,我看到你的回答有点晚,所以我可以晚些响应