Sockets 使用套接字编程在服务器上读取端口

Sockets 使用套接字编程在服务器上读取端口,sockets,c#-4.0,Sockets,C# 4.0,我的套接字编程代码有问题。 当我在下面使用时: var ipaddress = IPAddress.Parse("192.168.1.100"); IPAddress add = new IPAddress(ipaddress.GetAddressBytes()); TcpListener tcpListener = null; tcpListener = new TcpListener(add, 53); tcpL

我的套接字编程代码有问题。 当我在下面使用时:

       var ipaddress = IPAddress.Parse("192.168.1.100");
        IPAddress add = new IPAddress(ipaddress.GetAddressBytes());

        TcpListener tcpListener = null;
        tcpListener = new TcpListener(add, 53);
        tcpListener.Start();
        Console.WriteLine("Waiting for a connection...");
        while (true)
        {
            Thread.Sleep(10);

            TcpClient tcpClient = tcpListener.AcceptTcpClient();
            //Read the data stream from the client. 
            byte[] bytes = new byte[512];
            NetworkStream stream = tcpClient.GetStream();
            stream.Read(bytes, 0, bytes.Length);
            SocketHelper helper = new SocketHelper();
            helper.processMsg(tcpClient, stream, bytes);
        }
我收到这个错误:

附加信息:每个套接字地址(协议/网络地址/端口)通常只允许使用一次

但我把我的cod改为:

 static Socket sktListener;
 var ipaddress = IPAddress.Parse("192.168.1.100");
        IPAddress add = new IPAddress(ipaddress.GetAddressBytes());
sktListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);


        IPEndPoint ipLocal = new IPEndPoint(add, 53);

        sktListener.Connect(ipLocal);

        if (sktListener.Connected)
        {
            byte[] bytes = new byte[512];
            int i = sktListener.Receive(bytes);
            Console.WriteLine(Encoding.UTF8.GetString(bytes));
        }
但它没有任何作用。在这条线上停下来

int i = sktListener.Receive(bytes);
IPAddress.Parse()
返回一个新的
IPAddress
对象,您不需要从第一个对象的字节创建第二个
IPAddress
对象:

IPAddress add = IPAddress.Parse("192.168.1.100");
关于第一个代码中的使用错误,这意味着192.168.1.100:53已被另一个套接字使用

第二个代码不是创建服务器,而是创建连接到服务器的客户机。假设这些代码要一起工作,那么就可以理解为什么
Receive()
会被阻塞-您的客户机希望接收服务器未发送的数据。您的服务器代码期望新客户端发送数据,但您的客户端没有发送任何数据