gpt4 book ai didi

java - Android TCP套接字客户端/服务器实现

转载 作者:可可西里 更新时间:2023-11-01 02:33:33 25 4
gpt4 key购买 nike

我是 Java 和 Android 的新手,我正在尝试创建一个服务器/客户端应用程序。目前我在 PC 上运行服务器,而客户端在 Android 设备上。通信发生并且一切正常,但我想区分来自客户端的传入消息以便在服务器上执行不同的操作。这是服务器的代码。客户端非常简单并且运行良好。例如,当我从客户端发送“姓名”时,服务器应回答“Matteo”,但它总是回答“其他”,我不明白为什么!我想问题出在语句 if (dataInputStream.equals("Name")) {

谢谢。

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;


public class Server1 {

public static void main(String[] args){
ServerSocket serverSocket = null;
Socket socket = null;
DataInputStream dataInputStream = null;
DataOutputStream dataOutputStream = null;

try {
serverSocket = new ServerSocket(8888);
System.out.println("Listening on port 8888");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

while(true){
try {
socket = serverSocket.accept();
dataInputStream = new DataInputStream(socket.getInputStream());
dataOutputStream = new DataOutputStream(socket.getOutputStream());
System.out.println(socket.getInetAddress() + " : " + dataInputStream.readUTF());

if (dataInputStream.equals("Name")) {
dataOutputStream.writeUTF("Matteo!");

}
else if (dataInputStream.equals("Surname")) {
dataOutputStream.writeUTF("Rossi!");

}
else {
dataOutputStream.writeUTF("Something else!");

}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if( socket!= null){
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

if( dataInputStream!= null){
try {
dataInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

if( dataOutputStream!= null){
try {
dataOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}

最佳答案

DataInputStream 表示来自套接字的数据流的句柄,而不是数据本身。所以 .equals() 将它与另一个 DataInputStream 进行比较,而不是与 String 进行比较。您正在将它直接与字符串进行比较,这显然会返回 false

就像您使用writeUTF() 写入数据一样,您需要通过DataInputStream 从套接字连接读取数据。使用描述的 read() 方法之一 here或者如果您知道您的客户端将发送整行,您可以将其包装在 BufferedReader 中并使用以下内容:

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(dataInputStream));
String input = bufferedReader.readLine();
if (input.equals("Name")
{
dataOutputStream.writeUTF("Matteo!");
}
else ...

另一方面,在 Java 7 中,您也可以在 String 上使用 switch 语句,而不是 .equals()

关于java - Android TCP套接字客户端/服务器实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13583029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com