0

我做了一个 Java Socket 服务器和一个 C++ 客户端。但是,客户端连接到服务器,没有问题。但是当我写一些客户端-服务器时,服务器没有捕捉到消息。我做错了什么?

Java Server的一点点代码:

DataInputStream dis=new DataInputStream(usrSocket.getInputStream());
ByteArrayOutputStream out = new ByteArrayOutputStream();
int data;
while((data = dis.read())>=0) {
out.write(data);
}
byte[] bytes = out.toByteArray();
String decrypt = new String(bytes);
if(decrypt.equals("status")){
System.out.println("Status emitted.");
}
System.out.println("Received a message.");

C++ 客户端编写:

QByteArray qba;
qba.append(text);
sock->write(qba.data());
qDebug() << "Send status";

我需要这方面的帮助,非常感谢。(那个变量“text”是一个QString)


编辑

Java 服务器:这只是所有代码的一部分,主线程等待连接(Socket sock = server.accept())并为每个用户创建一个新线程。我发布的 Java 服务器代码,它是用户线程的一部分。如果您需要所有代码,请告诉我。

我将等待答案!非常感谢!对不起,如果我回答你晚了。

4

4 回答 4

0

如果我没看错,那是因为您的客户端仍在运行。Read() 返回数字 >= 0,直到客户端套接字关闭。

于 2013-01-16T13:08:07.983 回答
0

您的 Java 代码读取套接字直到 EOS,然后打印一些东西,顺便说一句,这不是解密操作。你的 C++ 客户端写了一些东西并且从不关闭套接字。所以服务器永远无法摆脱读取循环。

于 2012-08-15T23:37:55.320 回答
0

当您使用 QTcpSocket 时,您很可能在默认异步模式下运行客户端。这意味着当您在调用 connectToHost 后写入时,不会发送任何内容,因为套接字未连接

尝试使用:

socket->connectToHost(hostAddress, hostPort, QIODevice::ReadWrite);
if (socket->waitForConnected()) {
    QString text = "test string";
    QByteArray array;
    array.append(string);
    qDebug() << socket->write(array);
} else {
    // connect error!
}
于 2012-08-15T15:55:46.373 回答
0

试试这个Java Server的代码。

ServerSocket ss = new ServerSocket(Port_No);

Socket incomingClient = ss.accept();

InputStream i = incomingClient.getInputStream();

OutputStream o = incomingClient.getOutputStream();  // Use it write to the Client Socket

InputStreamReader isr = new InputStreamReader(i);

BufferedReader br = new BufferedReader(isr);

String str = new String();

while ((str = br.readLine())!=null){


     // do what you want with the data received in str.

 }
于 2012-08-15T15:21:26.657 回答