千家信息网

如何理解Java socket编程

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"如何理解Java socket编程"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!介绍
千家信息网最后更新 2026年11月03日如何理解Java socket编程

本篇内容介绍了"如何理解Java socket编程"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

介绍

socket通常也被称作"套接字",用于描述IP地址和端口,是一个通信链的句柄;同时 socket 的通信是基于TCP/IP 网络层上的一种传送方式,我们通常把TCP和UDP称为传输层 。 下面就通过 socket通信的基本原理和示例带大家认识一下吧!

socket通信基本原理

上面介绍说了,socket通信是基于TCP/IP 协议,属于传输层协议,如下图所示:

同时socket是基于应用服务与TCP/IP通信之间的一个抽象,他将TCP/IP协议里面复杂的通信逻辑进行分装,对用户来说,只要通过一组简单的API就可以实现网络的连接。首先,服务端初始化ServerSocket,然后对指定的端口进行绑定,接着对端口及进行监听,通过调用accept方法阻塞;此时,如果客户端有一个socket连接到服务端,那么服务端通过监听和accept方法可以与客户端进行连接。如下图所示:


基本示例

服务器端 :监听一个端口,等待连接的到来

import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer {
public static void main(String[] args) throws Exception {
// 监听指定的端口
int port = 55533;
ServerSocket server = new ServerSocket(port);

// server将一直等待连接的到来
System.out.println("server将一直等待连接的到来");
Socket socket = server.accept();
// 建立好连接后,从socket中获取输入流,并建立缓冲区进行读取
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
int len;
StringBuilder sb = new StringBuilder();
while ((len = inputStream.read(bytes)) != -1) {
//注意指定编码格式,发送方和接收方一定要统一,建议使用UTF-8
sb.append(new String(bytes, 0, len,"UTF-8"));
}
System.out.println("get message from client: " + sb);
inputStream.close();
socket.close();
server.close();
}
}

客户端:通过ip和端口,连接到指定的server,然后通过Socket获得输出流,并向其输出内容,服务器会获得消息。最终服务端控制台打印消息

import java.io.OutputStream;
import java.net.Socket;

public class SocketClient {
public static void main(String args[]) throws Exception {
// 要连接的服务端IP地址和端口
String host = "127.0.0.1";
int port = 55533;
// 与服务端建立连接
Socket socket = new Socket(host, port);
// 建立连接后获得输出流
OutputStream outputStream = socket.getOutputStream();
String message="你好";
socket.getOutputStream().write(message.getBytes("UTF-8"));
outputStream.close();
socket.close();
}
}

上面这个例子是单向的发送消息的例子,通常是有问必答,是双向的。可参考如下例子:

双向通信-服务器端:比上面不同的是当读取完客户端的消息后,打开输出流,将指定消息发送回客户端

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer {
public static void main(String[] args) throws Exception {
// 监听指定的端口
int port = 55533;
ServerSocket server = new ServerSocket(port);

// server将一直等待连接的到来
System.out.println("server将一直等待连接的到来");
Socket socket = server.accept();
// 建立好连接后,从socket中获取输入流,并建立缓冲区进行读取
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
int len;
StringBuilder sb = new StringBuilder();
//只有当客户端关闭它的输出流的时候,服务端才能取得结尾的-1
while ((len = inputStream.read(bytes)) != -1) {
// 注意指定编码格式,发送方和接收方一定要统一,建议使用UTF-8
sb.append(new String(bytes, 0, len, "UTF-8"));
}
System.out.println("get message from client: " + sb);

OutputStream outputStream = socket.getOutputStream();
outputStream.write("Hello Client,I get the message.".getBytes("UTF-8"));

inputStream.close();
outputStream.close();
socket.close();
server.close();
}
}

双向通信-客户器端 :比上面不同的是在发送完消息时,调用关闭输出流方法,然后打开输出流,等候服务端的消息

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class SocketClient {
public static void main(String args[]) throws Exception {
// 要连接的服务端IP地址和端口
String host = "127.0.0.1";
int port = 55533;
// 与服务端建立连接
Socket socket = new Socket(host, port);
// 建立连接后获得输出流
OutputStream outputStream = socket.getOutputStream();
String message = "你好 yiwangzhibujian";
socket.getOutputStream().write(message.getBytes("UTF-8"));
//通过shutdownOutput高速服务器已经发送完数据,后续只能接受数据
socket.shutdownOutput();

InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
int len;
StringBuilder sb = new StringBuilder();
while ((len = inputStream.read(bytes)) != -1) {
//注意指定编码格式,发送方和接收方一定要统一,建议使用UTF-8
sb.append(new String(bytes, 0, len,"UTF-8"));
}
System.out.println("get message from server: " + sb);

inputStream.close();
outputStream.close();
socket.close();
}
}

注意事项

在使用socket编程时,要注意告知对方已发送完命令,需使用如下方式:

方式一:通过Socket关闭 (注:客户端Socket关闭后,将不能接受服务端发送的消息,也不能再次发送消息;如果客户端想再次发送消息,需要重现创建Socket连接);

方式二:通过Socket关闭输出流的方式;

方式三:通过约定符号;

方式四:通过特定长度;

"如何理解Java socket编程"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

服务 消息 输出 客户 端口 UTF-8 通信 客户端 方式 监听 服务器 编程 例子 内容 双向 地址 建议 收方 方法 格式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州紫鲸互联网科技有限公司 深圳恒合互联网络科技有限公司 互联网科技垄断 上海挚品互联网科技 互联网科技媒体 赫美联合互联网科技 亿人帮互联网科技 互联网科技有哪些公司 互联网金融中的现代科技 湖北码尼互联网科技有限公司电话 世界互联网科技公司市值排名 乌苏新华互联网科技做什么的 深圳艾果互联网通讯科技 智帮互联网科技公司最近动向 互联网科技年终奖 吉林省码上互联网科技电话 福仕德教育科技互联网 众联互联网络科技 互联网科技对化妆品行业 互联网大会出现的黑科技 北京路客互联网科技有限公司 赫美联合互联网科技 互联网 视角下的科技创新 互联网科技英文翻译 天速互联网络科技有限公司 互联网科技实习生岗位职责 深圳无忧互联网科技 张召忠谈中国互联网科技 2021世界互联网领先科技成果发布 互联网科技新闻
0