C# C++;套接字服务器从Java客户机接收消息,但不接收其他消息 我刚刚开始学习C++和java。对于我的第一个项目,我制作了一个C++ TCP套接字服务器。不幸的是,它没有像我预期的那样工作

C# C++;套接字服务器从Java客户机接收消息,但不接收其他消息 我刚刚开始学习C++和java。对于我的第一个项目,我制作了一个C++ TCP套接字服务器。不幸的是,它没有像我预期的那样工作,c#,java,android,c++,sockets,C#,Java,Android,C++,Sockets,工作原理: 如果启动java Android 客户端,我的C++服务器立即检测到新连接。 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.intrologin_layout); client = new TCPClient("10.0.2.2", 50120); try {

工作原理:

如果启动java <强> Android <强>客户端,我的C++服务器立即检测到新连接。

protected void onCreate(Bundle savedInstanceState)   {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.intrologin_layout);
    client = new TCPClient("10.0.2.2", 50120);

    try {
        new Thread() {
            public void run() {
                try {
                    client.startClient();
                }
                catch(Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
    catch(Exception e) {
        e.printStackTrace();
    }
}
发送字节也可以通过Java Android客户端工作:

output = new DataOutputStream(connectionSocket.getOutputStream());
output.write(Packet);
output.flush();

我的C++服务器返回控制台中自动接收的数据包,这很好, 但是我尝试回传,ReCV在我的C++客户端上工作,但是这里的主要问题是,在我关闭服务器进程或socket之前,它不会在我的java客户端<强> > <强> > /p> C++服务器端:

pd->SendPacket("BYE\0", 4);

我从几周前就遇到了这个问题,谢谢。

您有input.readLine(),除非检测到换行符,否则它不会返回。如果您的服务器发送以换行符终止的消息,您的java客户机应该接收这些消息

下面是从服务器接收到的代码打印。使用BufferedInputStream而不是BufferedReader。还没有测试下面的代码,但它将读取多达10字节的服务器每次。因为它是缓冲的,所以我不确定它有多“实时”。例如,服务器发送3个字符,然后休眠5秒,然后发送7个字符。客户机是否会立即收到3个字符并在5秒后打印7个字符,或者客户机是否会等待并在5秒后收到10个字符并立即打印所有10个字符,您需要对此进行测试

BufferedInputStream input = new BufferedInputSream(socket.getInputStream());
byte[] buffer = new byte[10]; // 10 bytes buffer
int bytesRead = 0;
while( (bytesRead=input.read(buffer)) !=-1 ) { // read up to 10 bytes
    String str = new String(buffer,0,bytesRead); // convert bytes to String using default encoding
    System.out.println("Data received: " + str);
}

我被困在同一个问题一个月,即使重做整个项目的不同仍然没有帮助我,问题是如此简单
in.readline()
函数期望行尾继续,所以您应该将其附加到缓冲区中

 pd->SendPacket("BYE\0\n", 4);

希望它帮助我,就像它帮助了我。

也许我没有解释清楚,java Android客户端,只有在我杀死C++服务器进程或关掉Socket。在实际代码中不存在。@mah只是尝试了一下,不起作用。但如果我杀了这个进程,它就会收到它(@mah非常感谢,这是真正的方向。最后,匿名用户的回答是正确的:pd->SendPacket(“拜拜”,4);工作起来很有魅力。我很高兴你解决了这个问题。我将删除我以前的评论,尽管它们真的没有提供任何帮助。input.toString();在实际代码中不存在。我错误地添加了它,但在这里不相关。顺便问一下,换行符是什么?换行符是字符“\n”.刚刚知道它是什么,我要试试。谢谢。哇,非常感谢你,伙计。它很有效!太简单了,难以置信。我还有一个问题,没有换行功能,有没有其他方法?
BufferedInputStream input = new BufferedInputSream(socket.getInputStream());
byte[] buffer = new byte[10]; // 10 bytes buffer
int bytesRead = 0;
while( (bytesRead=input.read(buffer)) !=-1 ) { // read up to 10 bytes
    String str = new String(buffer,0,bytesRead); // convert bytes to String using default encoding
    System.out.println("Data received: " + str);
}
 pd->SendPacket("BYE\0\n", 4);