Java网络编程:Socket和ServerSocket通信案例
在Java中,Socket和ServerSocket是实现客户端与服务器端通信的重要类。以下是一个简单的案例来演示它们的使用。
- 客户端(创建Socket连接到服务器)
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
try {
// 创建Socket对象
Socket socket = new Socket("localhost", 1234); // "localhost"是服务器地址,1234是服务端的监听端口
// 获取输出流
OutputStream outputStream = socket.getOutputStream();
// 发送数据(这里以字符串为例)
String message = "Hello, Server!";
byte[] bytes = message.getBytes("UTF-8"); // "UTF-8"是字符集,确保在服务器端接收的数据也是这种格式
// 向输出流写入数据
outputStream.write(bytes);
// 关闭连接(Socket会自动关闭连接,但如果需要明确处理,则需要手动关闭)
socket.close();
System.out.println("Message sent successfully!");
} catch (IOException e) {
e.printStackTrace();
System.out.println("Error occurred while sending message.");
}
}
}
- 服务器端(创建ServerSocket监听客户端连接)
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
try {
// 创建ServerSocket对象,指定监听的端口
ServerSocket serverSocket = new ServerSocket(1234); // 1234是服务端的监听端口
// 接受客户端连接(一个Socket实例会被返回,代表与客户端的通信)
Socket socket = serverSocket.accept(); // 阻塞等待客户端连接
System.out.println("Client connected successfully!");
// 获取输入流和输出流
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
// 读取客户端发送的数据(这里以字符串为例)
byte[] bytes = new byte[1024]; // 设置接收数据的大小,可以根据实际需求调整
int lengthRead = inputStream.read(bytes); // 没有明确指定读取的长度,Java会自动处理
// 发送数据给客户端(这里以回显字符串为例)
outputStream.write(bytes, 0, lengthRead)); // 将读取到的数据写回到输出流中
} catch (IOException e) {
e.printStackTrace();
System.out.println("Error occurred while handling client connection.");
}
}
}
这个案例展示了如何通过Socket和ServerSocket进行简单的客户端与服务器端的通信。
还没有评论,来说两句吧...