如何修复TCPIP服务器/ clinet应用程序通信

时间:2016-04-04 11:59:04

标签: c# tcp-ip

我需要制作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();
}

我面临的问题是,一旦我实现了沟通,第二个响应就会崩溃:

  

通常只允许使用每个套接字地址(协议/网络地址/端口)

那么,如何修复此错误以后再允许发送文件? (后来有序列化等)

2 个答案:

答案 0 :(得分:1)

朋友,你好像在这里重新发明轮子。有了所有可用的技术,没有理由你需要在"套接字上做这些事情。水平。更简单:

  • 一端使用FTP服务器,内置于.NET的FTP客户端
  • 使用允许呼叫客户端发送流的方法编写Web服务。

除插座外的任何东西。你会浪费很多时间。

答案 1 :(得分:1)

您确定没有尝试多次启动服务器吗?与客户端不同,服务器永不退出,Console.ReadLine阻止您在按Enter键之前接收另一个客户端。我假设当您尝试启动新服务器时,旧服务器仍然挂在后台,这必然会失败。摆脱ReadLine,添加正确的方法退出服务器,不要同时运行多个服务器,你应该没事。

编写自定义TCP客户端/服务器应用程序非常棘手。 TCP仍然是一个非常低级别的协议,它可能不会像你期望的那样工作。如果您选择遵循此路径,请确保首先了解TCP的工作原理,并了解如何正确处理所有通信状态和错误。