如何使用Java进行网络编程,如Socket通信?
在Java中,我们可以使用java.net.Socket
和java.net.ServerSocket
来进行Socket通信。
以下是一个基本的客户端和服务器端的例子:
客户端(创建Socket连接到服务器):
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
// 创建一个Socket对象
Socket socket = new Socket("localhost", 1234); // "localhost"是服务器的IP地址
// 创建一个OutputStream对象,用于向服务器发送数据
OutputStream outputStream = socket.getOutputStream();
// 发送字符串到服务器
outputStream.write("Hello, Server!".getBytes()); // .getBytes()将字符串转换为字节数组
// 关闭输出流和Socket
outputStream.close();
socket.close();
}
}
服务器端(创建ServerSocket监听客户端连接):
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
// 创建一个ServerSocket对象,用于监听客户端的连接
ServerSocket serverSocket = new ServerSocket(1234); // 1234是端口号
// 监听客户端的连接
while (true) {
Socket socket = serverSocket.accept(); // accept()方法会阻塞直到有新的客户端连接到来
// 创建一个InputStream对象,用于从客户端读取数据
InputStream inputStream = socket.getInputStream();
// 使用 BufferedReader 读取字节流
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)));
// 从客户端接收消息
String messageFromClient = bufferedReader.readLine(); // .readLine()会返回当前行的所有字符,包括换行符
// 向客户端发送消息
OutputStream outputStreamToClient = socket.getOutputStream();
outputStreamToClient.write("Hello, Client!".getBytes()); // .getBytes()将字符串转换为字节数组
// 关闭Socket、InputStream和OutputStream
bufferedReader.close();
inputStream.close();
outputStreamToClient.close();
// 清理服务器Socket,以便等待新的客户端连接到来
serverSocket.setSoTimeout(0); // 设置超时时间为0,表示立即关闭ServerSocket,释放资源
}
}
}
以上代码中,客户端发送一条消息到服务器,然后服务器将该消息返回给客户端。服务器端会一直监听客户端的连接,并在接收到客户端的消息后进行响应。
还没有评论,来说两句吧...