Java套接字编程 – 套接字服务器,客户端示例

欢迎来到Java Socket编程示例。每个服务器都是在特定系统上运行的程序,并侦听特定端口。套接字绑定到端口号,当我们运行任何服务器时,它只是侦听套接字并等待客户端请求。例如,运行在8080端口上的tomcat服务器等待客户端请求,一旦收到任何客户端请求,就会对其进行响应。

Java套接字编程

套接字是网络上运行的两个程序之间双向通信链路的一个端点。套接字绑定到端口号,以便TCP层可以识别数据要发送到的应用程序。在Java套接字编程示例教程中,我们将学习如何编写Java套接字服务器Java套接字客户端程序。我们还将学习服务器客户端程序如何在套接字上读写数据。java.net.Socketjava.net.ServerSocket是实现套接字和套接字服务器的Java类。

Java套接字服务器示例

package com.journaldev.socket;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.ClassNotFoundException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * This class implements java Socket server
 * @author pankaj
 *
 */
public class SocketServerExample {
    
    //静态 ServerSocket 变量
    private static ServerSocket server;
    //套接字服务器监听的端口
    private static int port = 9876;
    
    public static void main(String args[]) throws IOException, ClassNotFoundException{
        //创建套接字服务器对象
        server = new ServerSocket(port);
        //保持无限期监听,直到接收到'exit'调用或程序终止
        while(true){
            System.out.println("Waiting for the client request");
            //创建套接字并等待客户端连接
            Socket socket = server.accept();
            //从套接字读取到 ObjectInputStream 对象
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            //将 ObjectInputStream 对象转换为字符串
            String message = (String) ois.readObject();
            System.out.println("Message Received: " + message);
            //创建 ObjectOutputStream 对象
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            //将对象写入套接字
            oos.writeObject("Hi Client "+message);
            //关闭资源
            ois.close();
            oos.close();
            socket.close();
            //如果客户端发送退出请求,则终止服务器
            if(message.equalsIgnoreCase("exit")) break;
        }
        System.out.println("Shutting down Socket server!!");
        //关闭 ServerSocket 对象
        server.close();
    }
    
}

Java 套接字客户端

package com.journaldev.socket;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * This class implements java socket client
 * @author pankaj
 *
 */
public class SocketClientExample {

    public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException, InterruptedException{
        //获取本地主机 IP 地址,如果服务器运行在其他 IP 上,则需要使用该 IP
        InetAddress host = InetAddress.getLocalHost();
        Socket socket = null;
        ObjectOutputStream oos = null;
        ObjectInputStream ois = null;
        for(int i=0; i<5;i++){
            //建立与服务器的套接字连接
            socket = new Socket(host.getHostName(), 9876);
            //使用 ObjectOutputStream 写入套接字
            oos = new ObjectOutputStream(socket.getOutputStream());
            System.out.println("Sending request to Socket Server");
            if(i==4)oos.writeObject("exit");
            else oos.writeObject(""+i);
            //读取服务器响应消息
            ois = new ObjectInputStream(socket.getInputStream());
            String message = (String) ois.readObject();
            System.out.println("Message: " + message);
            //关闭资源
            ois.close();
            oos.close();
            Thread.sleep(100);
        }
    }
}

为了测试服务器-客户端通信的Java套接字编程,首先我们需要运行SocketServerExample类。当你运行套接字服务器时,它将只会打印“等待客户端请求”,然后等待客户端请求。现在当你运行SocketClientExample类时,它将向Java套接字服务器发送请求,并将响应消息打印到控制台。以下是Java套接字服务器SocketServerExample程序的输出。

Waiting for the client request
Message Received: 0
Waiting for the client request
Message Received: 1
Waiting for the client request
Message Received: 2
Waiting for the client request
Message Received: 3
Waiting for the client request
Message Received: exit
Shutting down Socket server!!

以下是Java套接字客户端SocketClientExample程序的输出。

Sending request to Socket Server
Message: Hi Client 0
Sending request to Socket Server
Message: Hi Client 1
Sending request to Socket Server
Message: Hi Client 2
Sending request to Socket Server
Message: Hi Client 3
Sending request to Socket Server
Message: Hi Client exit

这就是关于Java套接字编程的一个快速概述。希望你可以开始使用Java套接字服务器和Java套接字客户端编程。参考:Oracle文档

Source:
https://www.digitalocean.com/community/tutorials/java-socket-programming-server-client