优化下面代码package Y; import java.io.*; import java.net.*; import java.util.*; public class Shiyan5Client { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Socket mysocket = null; DataInputStream in = null; DataOutputStream out = null; Thread timeData; TellTime time = null; try { mysocket = new Socket(); time = new TellTime(); timeData = new Thread(time); System.out.println("输入服务器IP:"); String IP = sc.nextLine(); System.out.println("输入端口号:"); int port = sc.nextInt(); if (mysocket.isConnected()) {} else { InetAddress address = InetAddress.getByName(IP); InetSocketAddress socketAddress = new InetSocketAddress(IP, port); mysocket.connect(socketAddress); in = new DataInputStream(mysocket.getInputStream()); out = new DataOutputStream(mysocket.getOutputStream()); time.setDataInputStream(in); timeData.start(); } } catch (Exception e) { System.out.println("服务器已断开:"+e); // TODO: handle exception } System.out.println("请输入服务:"); while (sc.hasNext()) { try { String service = sc.next(); out.writeUTF(service); } catch (Exception e) { // TODO: handle exception } } } }
时间: 2024-01-09 17:05:07 浏览: 25
下面是优化后的代码:
```java
package Y;
import java.io.*;
import java.net.*;
import java.util.*;
public class Shiyan5Client {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Socket mysocket = null;
DataInputStream in = null;
DataOutputStream out = null;
Thread timeData;
TellTime time = null;
try {
System.out.println("输入服务器IP:");
String IP = sc.nextLine();
System.out.println("输入端口号:");
int port = sc.nextInt();
sc.nextLine(); // 读取换行符
mysocket = new Socket(IP, port);
in = new DataInputStream(mysocket.getInputStream());
out = new DataOutputStream(mysocket.getOutputStream());
time = new TellTime();
time.setDataInputStream(in);
timeData = new Thread(time);
timeData.start();
} catch (Exception e) {
System.out.println("连接服务器失败:" + e);
return;
}
System.out.println("请输入服务:");
while (sc.hasNext()) {
try {
String service = sc.next();
out.writeUTF(service);
} catch (Exception e) {
System.out.println("发送数据失败:" + e);
return;
}
}
try {
mysocket.close();
} catch (IOException e) {
System.out.println("关闭套接字失败:" + e);
}
}
}
```
主要改进如下:
1. 将连接服务器的代码放在 try 块中,如果连接失败直接返回,避免出现空指针异常。
2. 读取完端口号后需要调用 `sc.nextLine()` 读取掉换行符,否则下一个读取字符串操作会读到空字符串。
3. 当发送数据失败时应该直接返回,避免继续执行程序出现异常。
4. 在程序结束时应该关闭套接字。