簡體   English   中英

TCP套接字拒絕連接錯誤#10061

[英]Connection Refused with TCP socket Error # 10061

我正在創建一個小型聊天(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()時,我已經嘗試了具有相同問題的多個端口,並且我目前正在通過在我的應用程序中打開2個實例並在使用2個不同端口的同時在一台PC上進行測試防火牆關閉。

謝謝,

對於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");
}

在這個示例中,它變得非常簡單,您有一個服務器接受一個向其發送一些數據的客戶端。 客戶端連接,讀取數據然后顯示。

現實生活中的服務器會在客戶端連接並繼續偵聽新連接后立即旋轉新線程(或異步模型的任務)來滿足客戶端的請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM