Socket [C ++ \ Java] ServerSocket仅在客户端关闭时才接收字符串

时间:2018-01-28 22:37:33

标签: java c++ swing sockets serversocket

我在C++的应用程序将在Linux上运行。我用Java创建了一个日志GUI(选择Java,因为我已经使用过这种语言和Java摇摆)。简而言之,GUI创建ServerSocket,我的应用程序使用日志服务作为客户端,并通过网络将日志发送到服务器。

我的问题是,正如标题所说,当我关闭客户端时将所有数据都收到(从Eclipse中停止)。

这些是我的代码:

服务器端[Java]

ServerSocket serverSocket = new ServerSocket(3000);
System.out.println("ServerSocket created");
Socket socket = serverSocket.accept();
System.out.println("Connection received");
if (socket != null)
{
    java.io.InputStream is = socket.getInputStream();
    java.io.InputStreamReader isr = new java.io.InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    String a;
    do
    {
        a = br.readLine();
        System.out.println(a + " received");
    }
    while (a != null);
}

客户端[C ++]

while(true)
{
    std::unique_lock<std::mutex> lock {_mutex};
    _isLogEmpty.wait(lock,
                     [&]{return !_logs.empty();});
    try
    {
        std::string logToSend = _logs.front();
        char* messageToSendAsChar = new char[logToSend.length()+1];
        strcpy(messageToSendAsChar, logToSend.c_str());

        if (write(_fileDescriptor, messageToSendAsChar, logToSend.length()+1) > 0)
        {
            _logs.pop();
            logToSend.clear();
        }

        delete[] messageToSendAsChar;
    }
    catch (std::exception &e)
    {

    }
    catch (...)
    {

    }
}

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:3)

我猜你从C ++应用程序发送的char数组不包含

  

换行符('\n'),回车符('\r')或回车符   然后立即换行。

     

- BufferedReader.readLine() (Java Platform SE 7)

然后通过关闭C ++ - 客户端(从而关闭套接字),readLine方法可能会返回。

(很抱歉将此作为答案发布,但直到现在我才被允许直接发表评论)