我将编写一个简单的服务器,监听客户端连接。当客户端连接时,它会打开一个Datainputstream来读取客户端发送的所有数据(我的客户端编写的是UTF数据)。
以下是服务器代码:
@Override
public void run() {
// TODO Auto-generated method stub
try {
ServerSocket ss = new ServerSocket(7000);
while(true){
System.out.println("Il Server sta cercando Connessioni");
Socket s = ss.accept();
System.out.println("Il Server ha accettato un Client");
Thread t2 = new Thread(new Runnable(){
public void run(){
try {
while(true){
DataInputStream dis = new DataInputStream(s.getInputStream());
isAlreadyOpened = true;
System.out.println(dis.readUTF());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
isAlreadyOpened = false;
}
}
});
if(!isAlreadyOpened){
t2.start();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这是一份关于 IT 技术的翻译。我的客户开发了一个 Android 应用程序,该应用程序在按钮被点击时发送数据。这是非常基础的内容。请注意,HTML 标签需要保留。
@Override
public void onClick(View v) {
try {
DataOutputStream out = new DataOutputStream(s.getOutputStream());
out.writeUTF("Testiamo sto socket");
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
当客户端连接到服务器时,一切都很完美。但当我只点击一次客户端按钮时,发送的数据会显示在我的服务器日志中,但立即抛出异常。
Il Server sta cercando Connessioni
Il Server ha accettato un Client
Il Server sta cercando Connessioni
Testiamo sto socket
java.io.EOFException
at java.io.DataInputStream.readUnsignedShort(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
从Oracle文档中了解到,此异常被抛出 <>。但是我该如何避免这种情况呢?
if(dis.readUTF() != null){do the stuff}
- Briesanjiwhile(true)...
语句不够高效,应该避免使用。EOFException
表示已到达文件结尾异常。这意味着您正在做某些错误的操作(例如读取不存在的内容)。 - xdevs23while (true)
语句不高效的说法是完全无稽之谈。没有比这更高效的了。 - user207421