socket通信java
时间: 2023-11-10 12:58:34 浏览: 36
Socket通信是一种基于网络协议的通信方式,它通过网络协议在不同的计算机之间传输数据,可以实现跨平台、跨语言的数据传输。Java提供了Socket类和ServerSocket类来实现Socket通信。
1. 创建Socket对象
在客户端中,需要创建一个Socket对象来与服务器建立连接。Socket对象的构造函数需要传入服务器的IP地址和端口号,示例代码如下:
```java
String ip = "127.0.0.1"; // 服务器IP地址
int port = 8080; // 服务器端口号
Socket socket = new Socket(ip, port); // 创建Socket对象
```
在服务器端,需要创建一个ServerSocket对象来监听客户端的连接请求。ServerSocket对象的构造函数需要传入服务器的端口号,示例代码如下:
```java
int port = 8080; // 服务器端口号
ServerSocket serverSocket = new ServerSocket(port); // 创建ServerSocket对象
```
2. 发送和接收数据
在Socket通信中,客户端和服务器通过输入流和输出流来发送和接收数据。在客户端中,可以通过Socket对象获取输出流,然后使用输出流将数据发送给服务器,示例代码如下:
```java
OutputStream outputStream = socket.getOutputStream(); // 获取输出流
String message = "Hello, Server!"; // 要发送的数据
outputStream.write(message.getBytes()); // 将数据写入输出流
```
在服务器端,可以通过Socket对象获取输入流,然后使用输入流读取客户端发送的数据,示例代码如下:
```java
InputStream inputStream = socket.getInputStream(); // 获取输入流
byte[] buffer = new byte[1024];
int len = inputStream.read(buffer); // 从输入流中读取数据
String message = new String(buffer, 0, len); // 将字节数组转换为字符串
```
3. 关闭Socket对象
在通信完成后,需要将Socket对象关闭以释放资源。在客户端和服务器端都可以通过调用Socket对象的close()方法来关闭Socket对象,示例代码如下:
```java
socket.close(); // 关闭Socket对象
```
注意:在服务器端,需要在处理完客户端连接后及时关闭Socket对象。如果不关闭Socket对象,会导致资源浪费,影响服务的性能。可以通过在循环中监听客户端连接,并在每次连接之后关闭Socket对象来解决该问题,示例代码如下:
```java
while (true) {
Socket socket = serverSocket.accept(); // 监听客户端连接
// 处理客户端连接
socket.close(); // 关闭Socket对象
}
```