客户端连接基本步骤
- 创建Socket对象:指定服务器的IP地址和端口号,例如
Socket socket = new Socket("服务器IP", 端口号);
。
- 获取输入输出流:通过
socket.getInputStream()
获取输入流,用于接收服务器发送的数据;通过 socket.getOutputStream()
获取输出流,用于向服务器发送数据。
- 进行数据的读写操作:利用输入输出流进行数据的发送和接收。例如通过输出流向服务器发送消息:
OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream()); BufferedWriter bw = new BufferedWriter(osw); bw.write("消息内容\n"); bw.flush();
;通过输入流接收服务器消息:InputStreamReader isr = new InputStreamReader(socket.getInputStream()); BufferedReader br = new BufferedReader(isr); String message = br.readLine();
。
- 关闭连接:使用完毕后,关闭输入输出流和Socket对象,例如
br.close(); isr.close(); bw.close(); osw.close(); socket.close();
。
服务器端连接基本步骤
- 创建ServerSocket对象:指定监听的端口号,例如
ServerSocket serverSocket = new ServerSocket(端口号);
。
- 监听客户端连接:调用
serverSocket.accept()
方法,该方法会阻塞,直到有客户端连接过来,返回一个代表与客户端连接的Socket对象,例如 Socket clientSocket = serverSocket.accept();
。
- 获取输入输出流:与客户端类似,通过
clientSocket.getInputStream()
获取输入流,通过 clientSocket.getOutputStream()
获取输出流。
- 进行数据的读写操作:同样利用输入输出流进行数据的发送和接收。
- 关闭连接:关闭与客户端连接的Socket对象以及ServerSocket对象(若不再需要监听新连接),例如
clientSocket.close(); serverSocket.close();
。
连接过程中可能出现的异常及处理
- UnknownHostException:当指定的服务器主机名无法解析为IP地址时抛出。处理方式:检查服务器主机名是否正确,网络连接是否正常。在代码中可以通过try - catch块捕获该异常并进行相应提示,例如:
try {
Socket socket = new Socket("错误的主机名", 端口号);
} catch (UnknownHostException e) {
System.out.println("无法解析主机名,请检查输入。");
e.printStackTrace();
}
- ConnectException:当无法连接到指定的服务器和端口时抛出。处理方式:检查服务器是否启动,端口是否正确,防火墙等网络设置是否阻止连接。同样通过try - catch块捕获并处理,例如:
try {
Socket socket = new Socket("服务器IP", 错误的端口号);
} catch (ConnectException e) {
System.out.println("无法连接到服务器,请检查服务器状态和端口设置。");
e.printStackTrace();
}
- IOException:这是一个通用的I/O异常,在获取输入输出流、读写数据、关闭连接等操作时可能抛出。处理方式:具体问题具体分析,检查相关操作的代码逻辑,确保流的正确使用和关闭。例如在获取输入流时:
try {
Socket socket = new Socket("服务器IP", 端口号);
InputStream inputStream = socket.getInputStream();
} catch (IOException e) {
System.out.println("获取输入流时发生错误。");
e.printStackTrace();
}