import java.io.*;
import java.net.*;
public class SocketCommunicationExample {
public static void main(String[] args) {
try {
// 创建Socket对象,指定服务器IP地址和端口号
Socket socket = new Socket("127.0.0.1", 8888);
// 获取输入流,用于接收服务器发送的数据
InputStream inputStream = socket.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
// 获取输出流,用于向服务器发送数据
OutputStream outputStream = socket.getOutputStream();
PrintWriter printWriter = new PrintWriter(outputStream);
// 创建线程,用于接收服务器发送的数据并输出
Thread receiveThread = new Thread(new Runnable() {
@Override
public void run() {
try {
String message;
while ((message = bufferedReader.readLine()) != null) {
System.out.println("接收到服务器发来的消息:" + message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
receiveThread.start();
// 向服务器发送消息
String sendMessage = "Hello, Server!";
printWriter.println(sendMessage);
printWriter.flush();
// 关闭资源
printWriter.close();
outputStream.close();
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}Socket通信是一种基于TCP/IP协议的网络通信方式。它通过在客户端和服务器之间建立连接,实现双向的数据传输。
在Java中,可以利用Socket类进行Socket通信的实现。客户端通过创建一个Socket对象,指定服务器的IP地址和端口号来连接服务器。然后,通过获取输入流和输出流来进行数据的接收和发送。
上述代码中,我们创建了一个Socket对象,并指定了服务器的IP地址和端口号。通过该Socket对象,我们可以获取输入流和输出流。在这个例子中,我们使用了一个线程来接收服务器发送的消息,并输出到控制台。同时,我们也向服务器发送了一条消息。
需要注意的是,在实际应用中,Socket通信一般是存在于一个独立的线程中,以免阻塞主线程的执行。同时,为了确保资源能够被正确关闭,我们使用了try-catch-finally结构来处理异常并关闭相关的资源。