Java Socket 编程

17 Mar 2025 | 4 分钟阅读

Java Socket 编程用于不同 JRE 上运行的应用程序之间的通信。

Java Socket 编程可以是面向连接的,也可以是无连接的。

Socket 和 ServerSocket 类用于面向连接的套接字编程,而 DatagramSocket 和 DatagramPacket 类用于无连接的套接字编程。

套接字编程中的客户端必须知道两个信息:

  1. 服务器的 IP 地址,以及
  2. 端口号。

在这里,我们将进行单向客户端和服务器通信。在此应用程序中,客户端向服务器发送消息,服务器读取消息并打印。这里使用了两个类:Socket 和 ServerSocket。Socket 类用于通信客户端和服务器。通过这个类,我们可以读写消息。ServerSocket 类用于服务器端。ServerSocket 类的 accept() 方法会阻塞控制台,直到客户端连接。成功连接客户端后,它会在服务器端返回 Socket 的实例。

Socket Programming in Java

Socket 类

套接字只是机器之间通信的一个端点。Socket 类可用于创建套接字。

重要方法

方法描述
1) public InputStream getInputStream()返回与此套接字关联的 InputStream。
2) public OutputStream getOutputStream()返回与此套接字关联的 OutputStream。
3) public synchronized void close()关闭此套接字。

ServerSocket 类

ServerSocket 类可用于创建服务器套接字。此对象用于与客户端建立通信。

重要方法

方法描述
1) public Socket accept()返回套接字并建立服务器和客户端之间的连接。
2) public synchronized void close()关闭服务器套接字。

Java Socket 编程示例

创建服务器

要创建服务器应用程序,我们需要创建 ServerSocket 类的实例。在这里,我们使用 6666 端口号进行客户端和服务器之间的通信。您也可以选择其他端口号。accept() 方法等待客户端。如果客户端连接到指定的端口号,它将返回 Socket 的实例。

创建客户端

要创建客户端应用程序,我们需要创建 Socket 类的实例。在这里,我们需要传递服务器的 IP 地址或主机名以及端口号。在这里,我们使用“localhost”,因为我们的服务器运行在同一系统上。

让我们看一个简单的 Java Socket 编程示例,其中客户端发送文本,服务器接收并打印它。

文件:MyServer.java

文件:MyClient.java

要执行此程序,请打开两个命令提示符,并在每个命令提示符下按下面图所示执行每个程序。

运行客户端应用程序后,将在服务器控制台显示一条消息。

Java Networking Programming

Java Socket 编程示例(双向读写)

在此示例中,客户端将首先写入服务器,然后服务器将接收并打印文本。然后服务器将写入客户端,客户端将接收并打印文本。以此类推。

文件:MyServer.java

文件:MyClient.java


Java Socket 编程选择题

1. 在 Java 中,用于创建服务器套接字的类是?

  1. ServerSocket
  2. Socket
  3. DatagramSocket
  4. HttpServer

答案:a)

解释:ServerSocket 用于创建一个监听传入客户端连接的服务器。


2. HTTP 服务器的默认端口号是什么?

  1. 21
  2. 22
  3. 80
  4. 8080

答案:c)

解释:端口 80 是 HTTP 服务器的默认端口号。


3. 用于从套接字的输入流读取数据的方​​法是?

  1. readLine()
  2. read()
  3. getInputStream()
  4. accept()

答案:b)

解释:read() 方法用于从输入流中读取数据。


4. 如果在已关闭的套接字上执行套接字操作,会抛出哪个异常?

  1. IOException
  2. SocketException
  3. ClosedSocketException
  4. IllegalArgumentException

答案:b)

解释:当尝试在已关闭的套接字上执行套接字操作时,会抛出 SocketException。


5. bind() 方法在套接字编程中的作用是什么?

  1. 连接到远程地址
  2. 监听传入连接
  3. 将套接字与本地地址关联
  4. 向远程套接字发送数据

答案:c)

解释:Java 的 bind() 方法将套接字与本地地址关联。


下一个主题URL class