连接被拒绝,TCP套接字错误#10061

本文关键字:套接字 错误 #10061 TCP 拒绝 连接 | 更新日期: 2023-09-27 18:27:34

我正在创建一个小型聊天(1-1)应用程序来学习网络编程,当使用TCP协议创建套接字时,socket.Connect()总是返回错误10061。但是,如果我将套接字设为UDP,我就看不到问题。

这是我的代码:

myEndPoint = new IPEndPoint(IPAddress.Parse(_txtMyIPAdress.Text), int.Parse(_txtMyPort.Text));
TargetSideEndPoint = new IPEndPoint(IPAddress.Parse(_txtTargetIPAddress.Text), int.Parse(_txtTargetPort.Text));
mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
mySocket.Bind(myEndPoint);
mySocket.Connect(TargetSideEndPoint);
byte[] receivedBuffer = new byte[MAX_BUFFER_SIZE = 1024];
ReceivePackets(mySocket, receivedBuffer);//My function

有人能帮我吗?更新:我没有使用Listen(),问题是当我调用Connect()时我已经尝试了多个具有相同问题的端口,目前我正在1台PC上测试,从我的应用程序中打开2个实例,并在防火墙关闭时使用2个不同的端口。

谢谢,

连接被拒绝,TCP套接字错误#10061

对于TCP,这是一个面向连接的协议,您需要一个服务器和一个客户端。

服务器必须侦听传入的连接,客户端应该启动连接。然后,客户端将能够与服务器通信并交换数据。

下面是一个简单的工作示例:

void Main()
{
    Console.WriteLine("Starting listener thread");
    Thread serverThread = new Thread(ListenerThreadProc);
    serverThread.Start();
    Console.WriteLine("Waiting 500 milliseconds to allow listener to start");
    Thread.Sleep(500);
    Console.WriteLine("Client: Connecting to server");
    TcpClient client = new TcpClient();
    client.Connect(IPAddress.Loopback, 12345);
    Console.WriteLine("Client: Connected to server");
    byte[] buffer = new byte[5];
    Console.WriteLine("Client: Receiving data");
    using (NetworkStream clientStream = client.GetStream())
        clientStream.Read(buffer, 0, buffer.Length);
    Console.WriteLine("Client: Received data: " + buffer.Aggregate("", (s, b) => s += " " + b.ToString()));     
}
void ListenerThreadProc()
{   
    TcpListener listener = new TcpListener(IPAddress.Any, 12345);
    listener.Start();
    Console.WriteLine("Server: Listener started");
    Console.WriteLine("Server: Waiting for client to connect");
    TcpClient client = listener.AcceptTcpClient();
    Console.WriteLine("Server: Client connected");
    listener.Stop();    
    Console.WriteLine("Server: Listener stopped");
    Console.WriteLine("Server: Sending data");
    byte[] buffer = new byte[] { 1, 2, 3, 4, 5 };   
    using (NetworkStream clientStream = client.GetStream())
        clientStream.Write(buffer, 0, buffer.Length);
    Console.WriteLine("Server: Sent data");
}

在这个示例中,尽可能简单,您有一个服务器接受一个向其发送一些数据的客户端。客户端连接,读取数据,然后显示。

一旦客户端连接并继续侦听新的连接,真实的服务器就会旋转新的线程(或异步模型中的任务)来为客户端的请求提供服务。