簡體   English   中英

如何修復 TCPIP 服務器/客戶端應用程序通信

[英]How to fix TCPIP server/clinet apps communication

我需要制作 TCPIP 服務器和客戶端應用程序,它們將進行通信並發送一些隨機文件。 到目前為止,我做了這個:

服務器:

static void Main(string[] args)
{
     IPAddress localIP = IPAddress.Parse("127.0.0.1");
     TcpListener tcpServerListener = new TcpListener(localIP, 1234);
     tcpServerListener.Start();
     Console.WriteLine("Service started...");
     while (true)
     {
        var serverSocket = tcpServerListener.AcceptTcpClient();
        Console.WriteLine("Request accepted!");
        if (serverSocket.Connected)
        {
            Do(serverSocket);
        }
        Console.WriteLine("Waiting for new request...");
        Console.ReadLine();
    }
}

private static void Do(TcpClient serverSocket)
{
    var serverSockStream = serverSocket.GetStream();
    var reader = new StreamReader(serverSockStream);
    var poruka = reader.ReadLine();
    var odgovor = "Hello " + poruka;
    var writer = new StreamWriter(serverSockStream);
    writer.Flush();
    reader.Close();
    writer.Close();
}

客戶:

static void Main(string[] args)
{
    TcpClient tcpClient = new TcpClient("127.0.0.1", 1234);
    NetworkStream clientSockStream = tcpClient.GetStream();
    var writer = new StreamWriter(clientSockStream);
    writer.WriteLine("TCP/IP Client");
    writer.Flush();
    var reader = new StreamReader(clientSockStream);
    var odgovor = reader.ReadLine();
    Console.WriteLine("Answer received: " + odgovor);
    writer.Close();
    reader.Close();
}

我面臨的問題是,一旦我實現通信,第二個響應就會崩潰:

通常每個套接字地址(協議/網絡地址/端口)只允許使用一次

那么,如何修復此錯誤並稍后允許發送文件? (稍后進行序列化等)

朋友,你似乎在這里重新發明輪子。 有了所有可用於執行此操作的技術,您沒有理由需要在“套接字”級別執行此操作。 更簡單:

  • 一端使用FTP服務器,.NET內置FTP客戶端
  • 使用允許調用客戶端發送流的方法編寫 Web 服務。

除了套接字之外的任何東西。 你會浪費很多時間。

您確定您沒有嘗試多次啟動服務器嗎? 與客戶端不同,服務器永遠不會退出,並且Console.ReadLine阻止您接收另一個客戶端,直到您按下 Enter 鍵。 我假設當您嘗試啟動新服務器時,舊服務器仍然掛在后台,這必然會失敗。 去掉ReadLine ,加上適當的退出服務器的方式,不要同時運行多台服務器,應該沒問題。

編寫自定義 TCP 客戶端/服務器應用程序非常棘手。 TCP 仍然是一個非常低級的協議,它可能不會像您期望的那樣工作。 如果您選擇遵循此路徑,請務必先了解 TCP 的工作原理,並了解如何正確處理所有通信狀態和錯誤。

暫無
暫無

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

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