socket客户端发信息可以使用PrintWriter.write和OutputStream.write两种方式,它们的区别在于:
1. PrintWriter.write()方法是以字符为单位发送数据,可以发送字符串和字符数组等,自动进行编码转换,方便发送文本数据。而OutputStream.write()方法是以字节为单位发送数据,只能发送字节数组,需要手动进行编码转换,适合发送二进制数据。
2. PrintWriter.write()方法不会发送换行符,需要手动使用println()方法发送换行符。而OutputStream.write()方法不会自动发送换行符或者其他控制字符,需要手动添加。
下面是使用PrintWriter.write()方法发送信息的示例代码
```java
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
// 创建socket连接服务端
socket = new Socket("127.0.0.1", 8888);
// 获取输出流,向服务端发送信息
out = new PrintWriter(socket.getOutputStream(), true);
out.write("Hello, Server");
// 注意:需要手动发送换行符
out.println();
// 刷新缓冲区,确保数据已经发送
out.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭资源
out.close();
socket.close();
}
}
}
```
下面是使用OutputStream.write()方法发送信息的示例代码
```java
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = null;
OutputStream out = null;
BufferedReader in = null;
try {
// 创建socket连接服务端
socket = new Socket("127.0.0.1", 8888);
// 获取输出流,向服务端发送信息
out = socket.getOutputStream();
out.write("Hello, Server".getBytes("UTF-8"));
// 刷新缓冲区,确保数据已经发送
out.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭资源
out.close();
socket.close();
}
}
}
```