Java基于socket实现的客户端和服务端通信功能完整实例
什么是Socket
Socket是一个抽象的概念,可以理解为“插座”,在计算机网络中,两个程序通过Socket在网络上互相通信。Socket提供了程序与网络之间的通信接口。
Java中的Socket
Java的Socket是基于TCP/IP协议实现的。在Java中,可以通过Socket类和ServerSocket类来创建客户端和服务器端的Socket。
创建服务器端Socket(ServerSocket)
服务器端Socket创建时需要指定端口号(port)。当客户端需要与服务器进行通信时,需要连接这个端口号。
下面代码创建了一个ServerSocket,并在端口号8080上监听客户端的请求:
try {
// 创建ServerSocket对象,并指定监听端口号
ServerSocket serverSocket = new ServerSocket(8080);
//等待请求的到来,并且返回一个Socket对象,创建一个线程处理
while(true){//多次处理请求
Socket socket = serverSocket.accept();//等待客户端访问
new Thread(new ServerThread(socket)).start();//启动线程处理请求
}
} catch (IOException e) {
e.printStackTrace();
}
创建客户端Socket(Socket)
客户端的Socket创建时需要指定服务器端的IP和端口号。当客户端需要与服务器进行通信时,需要通过该IP和端口号连接服务器。
下面代码创建了一个Socket,并连接服务器上的IP地址为127.0.0.1,端口号为8080的服务器:
try{
// 创建Socket对象,并指定服务器的IP和端口号
Socket socket = new Socket("127.0.0.1", 8080);
//向服务器发送请求
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
printWriter.println("This is a client message!");
//接收服务器的响应
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = bufferedReader.readLine();
System.out.println("received from server:" + line);
//关闭各种连接
bufferedReader.close();
printWriter.close();
socket.close();
} catch(Exception e) {
e.printStackTrace();
}
完整实例
下面是一个Java基于Socket实现的客户端(Client)和服务端(Server)通信的完整实例。
客户端发送字符串消息到服务器端的示例代码:
public class Client {
public static void main(String[] args) {
String host = "127.0.0.1";
int port = 8000;
try{
// 创建Socket对象,并指定服务器的IP和端口号
Socket socket = new Socket(host, port);
//向服务器发送请求
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
String message = "hello,world!";
printWriter.println(message);
// 接收来自服务器的回复
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("received from server: " + bufferedReader.readLine());
//关闭各种连接
bufferedReader.close();
printWriter.close();
socket.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
服务端接收字符串消息并回复到客户端的示例代码:
public class Server {
public static void main(String[] args) {
int port = 8000;
try {
// 创建ServerSocket对象,并指定监听端口号
ServerSocket serverSocket = new ServerSocket(port);
while (true) {// 多次处理请求
Socket socket = serverSocket.accept();//等待客户端访问
//获取客户端的信息(IP、port)
InetSocketAddress clientInfo = (InetSocketAddress) socket.getRemoteSocketAddress();
String clientIP = clientInfo.getAddress().getHostAddress();
int clientPort = clientInfo.getPort();
System.out.println("accept client:"
+ clientIP + ":" + clientPort);
// 用线程池处理请求,提高服务器性能
new Thread(new ServerHandler(socket)).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
static class ServerHandler implements Runnable {
private Socket socket;
public ServerHandler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
BufferedReader bufferedReader = null;
PrintWriter printWriter = null;
try {
// 接收客户端发送的请求
bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String message = bufferedReader.readLine();
System.out.println("received from client: " + message);
//向客户端发送回复
printWriter = new PrintWriter(socket.getOutputStream(), true);
String replyMessage = "reply-" + message;
printWriter.println(replyMessage);
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭各种连接
try {
bufferedReader.close();
printWriter.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
上面的例子就是一个完整的Java基于Socket实现的客户端-服务器端通信功能的示例,可以通过该例子进一步深入理解Socket编程。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java基于socket实现的客户端和服务端通信功能完整实例 - Python技术站