Java中的套接字编程:简要指南
已发表: 2022-05-21在 Java 中,套接字编程是一种跨程序通信并保持连接到不同 JRE 的方法——面向连接的服务器和非面向连接的服务器。 Java 服务器套接字专门用于启动和处理服务器和客户端之间的通信。
该博客将涵盖有关套接字编程的所有知识。
Java中的套接字编程
套接字编程是以交互方式补充和使用单独的网络节点的过程。 这是一种双向通信系统,其中一个套接字(节点)侦听 IP 地址的特定端口,而另一个套接字连接。
Java中的套接字
在 Java 中,套接字是连接两个联网程序的双向通信通道的一端。 TCP 层用于为给定的 Java 套接字分配一个端口号,以识别我们正在向其传输数据的应用程序。 我们使用 IP 地址和端口号的组合来创建端点。
Java 平台包括一个名为 Socket 的类,它实现了 Java 应用程序和另一个程序之间双向网络连接的一侧。 该类位于与平台无关的实现之上,使您的 Java 程序免受系统特定细节的影响。
通过使用类而不是特定的本地代码,您的 Java 程序可以通过网络以独立于平台的方式进行通信。

此外,java.net 包括 ServerSocket 类,它实现了一个套接字,服务器可以使用该套接字来侦听和接受来自客户端的连接。 这是一个展示如何使用 ServerSocket 类和 Socket 的示例。
在客户端端口和服务器端端口之间,创建了一个连接。
建立 Java 套接字连接 [客户端]
在继续客户端编程之前,客户端应该等待服务器的启动。 一旦启动并运行,它将开始向 Java 服务器发送查询。 然后客户端将等待服务器的响应。 这是对客户端-服务器连接逻辑的一个很好的总结。
让我们更详细地研究客户端编程。
要连接到另一台机器,您需要一个套接字连接。 两台计算机必须知道它们在网络上的位置(IP 地址)以及它们用来建立套接字连接的 TCP 端口。 java.net 框架表示套接字类。
服务器的 IP 地址是第一个输入参数。 TCP 端口是这里的下一个参数。 (它只不过是一个数字,表明应该在服务器上启动哪个程序。)例如,HTTP 使用端口 80。通常,端口号的范围是从 0 到 65535。
沟通
当通过套接字连接进行通信时,流用于数据输入和输出。 发送请求并建立强连接后,您必须关闭套接字连接。
关闭 Java 服务器套接字连接
向服务器发送消息后显式关闭套接字连接,显式关闭套接字连接。
// Clientele 的演示 Java 程序
导入java.net.*;
导入java.io.*;
公共类 Client_Side_Program
{
// 用于初始化套接字流、输入流和输出流
私有套接字套接字= null;
私有数据输入流输入=空;
私有数据输出流输出= null;
// 用于放置 TCP 端口和 IP 地址的构造函数
公共客户端(字符串添加,int 端口)
{
//建立连接
尝试
{
套接字 = 新套接字(添加,端口);
System.out.println(“已连接”);
// 从终端获取输入
输入 = 新数据输入流(System.in);
// 将输出发送到套接字
out = new DataOutputStream(socket.getOutputStream());
}
捕获(UnknownHostException u)
{
System.out.println(u);
}
捕获(IOException 我)
{
System.out.println(i);
}
// 从输入中读取消息的字符串
字符串行=“”;
// 继续阅读直到输入“Over”
while (!line.equals(“Over”))
{
尝试
{
line = input.readLine();
out.writeUTF(line);
}
捕获(IOException 我)
{
System.out.println(i);
}
}
//关闭连接
尝试
{
输入.close();
out.close();
socket.close();
}
捕获(IOException 我)
{
System.out.println(i);
}
}
公共静态无效主(字符串参数 [])
{
客户端client = new Client(“127.0.0.1”, 5000);
}
}
要访问此代码的源代码,请单击此处。
建立 Java 套接字连接 [服务器端]
服务器创建其对象并等待客户端的请求,同时考虑 Java 服务器套接字端连接。 发送请求后,服务器将与客户端交互。 您需要两个套接字来编写服务器端应用程序,如下所示——当客户端创建一个新的 Socket() 时,会创建一个 ServerSocket 来等待客户端请求。 一个简单的套接字可以定义为启动与客户端的服务器端通信的程序。 从 java 服务器端套接字连接获取报告后,您可以相应地与客户端通信响应。
沟通
要使用套接字发送输出,我们一般期待使用 getOutputStream() 方法。
关闭 Java 服务器套接字连接
通过关闭套接字和输入输出流来完成连接至关重要。
// 一个服务器 java 程序
导入java.net.*;
导入java.io.*;
公共类服务器
{
//初始化socket和输入流
私有套接字套接字 = null;
私有 ServerSocket服务器 = null;
私有数据输入流 in = null;
// 带端口的构造函数
公共服务器(int 端口)
{
// 启动服务器后等待连接
尝试
{
服务器 = 新服务器套接字(端口);
System.out.println(“服务器:已启动”);
System.out.println(“等待客户的到来……”);
套接字 = server.accept();
System.out.println(“客户端已被接受”);
// 用于获取客户端套接字输入
在 = 新数据输入流(
新的 BufferedInputStream(socket.getInputStream()));
字符串行=“”;
// 用于从客户端读取消息,直到发送“结束”
while (!line.equals(“Over”))
{
尝试
{
line = in.readUTF();
System.out.println(line);
}
捕获(IOException 我)
{
System.out.println(i);
}
}
System.out.println("关闭连接");
//关闭连接
socket.close();
附寄();
}
捕获(IOException 我)
{
System.out.println(i);

}
}
公共静态无效主(字符串参数 [])
{
服务器服务器=新服务器(5000);
}
}
要查看此代码的详细信息,请单击此处。
客户端和服务器端都配置好后,可以先运行服务器端软件。 然后,您必须执行客户端软件并发送请求。 当请求来自客户端时,服务器将立即做出反应。
探索我们流行的软件工程课程
SL。 不 | 软件开发计划 | |
1 | LJMU & IIITB 计算机科学硕士 | 加州理工学院 CTME 网络安全证书课程 |
2 | 全栈开发训练营 | 区块链中的 PG 程序 |
3 | 软件开发行政研究生课程 - DevOps 专业化 | 查看所有软件工程课程 |
终端或命令提示符正在运行
要启动终端或命令提示符,我们将使用以下命令。 首先,我们将创建两个窗口,一个专用于服务器,另一个专用于客户端。
- 让服务器程序开始运行。
$java 服务器
- 然后,在另一个终端中,启动客户端应用程序,
java客户端$
当服务器接受客户端时,软件将显示“已连接”和“客户端已接受”。
- 在客户端框中,您可以开始输入消息。 这是客户端输入的示例。
你好! 这标志着我的第一个专业套接字连接。
服务器同时获取和显示的
你好! 这标志着我的第一个专业套接字连接。
超过。
关闭连接

如前所述,发送“结束”结束客户端和服务器之间的连接。
阅读我们与软件开发相关的热门文章
如何在 Java 中实现数据抽象? | Java中的内部类是什么? | Java 标识符:定义、语法和示例 |
通过示例了解 OOPS 中的封装 | C 中的命令行参数解释 | 2022 年云计算的 10 大特点和特点 |
Java 中的多态性:概念、类型、特征和示例 | Java 中的包以及如何使用它们? | Git 初学者教程:从零开始学习 Git |
结论
Java Socket 编程是一个必不可少的工具,它通过使用套接字 API 来建立本地和远程客户端-服务器应用程序之间的通信。 正确的套接字编程知识可以改善服务器和客户端的来回连接。
如果您想学习 Java 并掌握全栈开发,我们为您准备了影响深远的课程:upGrad 的软件开发执行 PG 计划 - 全栈开发专业化。
IIIT-B 为期 13 个月的课程旨在帮助学生掌握计算机科学基础、软件开发流程、后端 API 和交互式 Web UI 等技能。 您可以访问面向非技术人员和新程序员的软件职业转型训练营,以磨练他们的编程技能和 upGrad 提供的 360° 职业支持。
从世界顶级大学在线学习软件开发课程。 获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。
学习Java socket编程有什么好处?
从网络的角度来看,套接字可用于构建客户端-服务器应用程序,例如聊天。 套接字是在最基本的安全级别上实现的,以发现系统的端口是否打开、是否有标准的端口扫描程序(如 Nmap)以及它们是否可以在低级别使用。 它们的使用方式与 SSH 相同 - Secure Socket Shell 命令可用于通过反向 shell 连接到外部服务器。
接受函数有什么作用?
接受函数通过阻止待在那里直到参数到达来等待客户端连接到服务器。 然后我们使用 getInputStream 函数从套接字获取输入。 服务器被设计成它继续接受发送的消息,直到收到 Over 命令。
为什么在网络编程中使用线程?
我们希望多个客户同时加入。 因此,我们必须在服务器端使用线程,以便不同的线程可以处理每个客户端请求。 让我们假设两个请求同时到达服务器的情况。 由于在我们简单的服务器-客户端应用程序中没有提供同时处理多个请求的方法,因此即使提前一纳秒到达的请求也将能够连接到服务器,而另一个请求将被拒绝。