C# 在C中侦听tcp套接字时解析域名(URI)

C# 在C中侦听tcp套接字时解析域名(URI),c#,sockets,tcp,tcpclient,tcplistener,C#,Sockets,Tcp,Tcpclient,Tcplistener,我想在我的服务器上实现一个套接字侦听器控制台应用程序,它从多个套接字客户端获取数据 另一方面,每个客户端都有自己的域名,而不使用IP地址。我正在使用静态IP地址在我的服务器上运行侦听器,并且我已经为IP地址定义了一个通配符DNS记录,如:*.xxx.yyy.com 当我ping域名时,静态IP地址被解析,客户端能够使用域名发送数据 我正在特定端口上测试一个简单的TCP侦听器控制台应用程序,以获取控制台客户端发送的数据 以下是示例侦听器代码: using System; using System.

我想在我的服务器上实现一个套接字侦听器控制台应用程序,它从多个套接字客户端获取数据

另一方面,每个客户端都有自己的域名,而不使用IP地址。我正在使用静态IP地址在我的服务器上运行侦听器,并且我已经为IP地址定义了一个通配符DNS记录,如:*.xxx.yyy.com

当我ping域名时,静态IP地址被解析,客户端能够使用域名发送数据

我正在特定端口上测试一个简单的TCP侦听器控制台应用程序,以获取控制台客户端发送的数据

以下是示例侦听器代码:

using System;
using System.Net;
using System.Text;
using System.Net.Sockets;

namespace SocketExample
{
    public class SocketListener
    {
        public static int Main(String[] args)
        {
            StartServer();
            return 0;
        }


        public static void StartServer()
        {
            var ipAddress = IPAddress.Parse("xxx.xxx.xxx.xxx");
            IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);

            try
            {   
                Socket listener = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                listener.Bind(localEndPoint);
                listener.Listen(10);
                Socket handler = listener.Accept();

                string data = null;
                byte[] bytes = null;

                while (true)
                {
                    bytes = new byte[1024];
                    int bytesRec = handler.Receive(bytes);
                    data += Encoding.ASCII.GetString(bytes, 0, bytesRec);
                    if (data.IndexOf("<EOF>") > -1)
                    {
                        break;
                    }
                }

                Console.WriteLine("Text received : {0}", data);

                byte[] msg = Encoding.ASCII.GetBytes(data);
                handler.Send(msg);
                handler.Shutdown(SocketShutdown.Both);
                handler.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }

            Console.WriteLine("\n Press any key to continue...");
            Console.ReadKey();
        }
    }
}
客户端代码为:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace Client
{
    public class SocketClient
    {
        public static void Main(String[] args)
        {
            byte[] bytes = new byte[1024];


            var ipAddress = IPAddress.Parse("xxx.xxx.xxx.xxx");
            IPEndPoint remoteEP = new IPEndPoint(ipAddress, 11000);

            Socket sender = new Socket(ipAddress.AddressFamily,
                SocketType.Stream, ProtocolType.Tcp);


            sender.Connect(remoteEP);

            Console.WriteLine("Socket connected to {0}", sender.RemoteEndPoint.ToString());

            byte[] msg = Encoding.ASCII.GetBytes("This is a test<EOF>");

            int bytesSent = sender.Send(msg);

            int bytesRec = sender.Receive(bytes);
            Console.WriteLine("Echoed test = {0}", Encoding.ASCII.GetString(bytes, 0, bytesRec));

            sender.Shutdown(SocketShutdown.Both);
            sender.Close();
        }
    }
}
使用DNSEntry一切都很好,但问题是我想根据我的客户所呼叫的域名来识别他们

例如,我有两个客户:

client1.xxx.yyy.com client2.xxx.yyy.com 当侦听器接收到数据时,我希望根据调用的域名识别客户端

我想知道如何在侦听器端解析调用域名。
是否可以获取域名,或者客户端应该在发送的数据中发送特定的域名?

如果您想要客户端用来连接的文本域名,那么您的客户端必须将其作为其数据协议的一部分发送到服务器,类似于HTTP中的主机:头


当进行套接字连接时,只使用IP地址进行连接。此时文本域名不再存在。

TCP始终基于IP地址。您可以在客户端IP地址上执行反向DNS查找。是否仍要在网络层的某个位置插入文本域名?我有pfSense在边缘作为防火墙/路由器工作。否。TCP和IP都不关心文本域名。这些是应用程序实现的数据协议层之上的唯一层。