java实现服务器与客户端之间的TCP通信

简介: java实现服务器与客户端之间的TCP通信

服务器端: TCPServer.java

package com.zhanshen.demo;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
 * TCP通信的服务器端,接收客户端发的数据
 * java.net.ServerSocket
 *
 * 构造方法:
 *      ServerSocket(int port)
 *
 * 服务器必须明确,必须知道是哪个客户端请求的服务器
 * 所以可以使用accept方法获取请求到的客户端对象socket
 *
 * 成员方法:
 *      socket accept()   侦听并接收到此套接字的链接
 *
 * 服务器实现步骤:
 *      1. 创建服务器ServerSocket 对象和系统要制定的端口
 *      2. 使用ServerSocket对象中的方法accept 获取请求的客户端对象Socket
 *      3. 使用Socket对象中的getInputStream 获取网络字节输入流InputStream对象
 *      4. 使用网络字节输入流InputStream对象中的方法 read 读取客户端发送的请求
 *      5. 使用socket对象中的方法getOutputStream 获取网络字节输出流OutputStream对象
 *      6. 使用网络字节输出流 OutputStream对象中的write 来给客户端回写数
 *      7. 释放资源 Socket和ServerSocket
 *
 */
public class TCPServer {
    public static void main(String[] args) throws IOException {
        //1. 创建服务器socket
        ServerSocket serverSocket = new ServerSocket(8888);
        //2. 使用ServerSocket对象中的accept方法  获取客户端的socket
        Socket socket = serverSocket.accept();
        //3. 使用Socket对象中的getInputStream 获取网络字节输入流InputStream
        InputStream inputStream = socket.getInputStream();
        //4. 使用网络字节输入流InputStream 对象中的read 获取客户端发送的数据
        byte[] bytes = new byte[1024];
        int len = inputStream.read(bytes);
        System.out.println(new java.lang.String(bytes, 0, len));
        //5. 使用socket对象中的方法getOutputStream 获取字节输出流
        OutputStream outputStream = socket.getOutputStream();
        //6. 回写数据
        outputStream.write("收到. thank you".getBytes());
        //7. 释放资源
        socket.close();
        serverSocket.close();
    }
}

客户端: TCPClient.java

package com.zhanshen.demo;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
/**
 * TCP通讯的客户端,向服务器发送连接请求,给服务器发送数据,读取服务器回写的数据
 * 表示客户端的类 java.next.Socket
 * 套接字: 包含IP地址和端口号的网络单位
 *
 * 构造方法:
 *  Socket(String host, int port)
 *  host: 服务器主机的名名称或者IP
 * 成员方法:
 *  OutputStream getOutputStream()   返回此套接字的输出流
 *  InputStream getInputStream()     返回此套接字的输入流
 *  void close()  关闭套接字
 *
 * 实现步骤:
 *  1. 创建客户端对象socket   构造方法中绑定服务器的IP地址和端口号
 *  2. 使用getOutputStream() 获取网络字节输出流OutputStream对象
 *  3. 使用网络字节输出流OutputStream 对象中的方法write , 检查服务器发送数据
 *  4. 使用socket对象中的getInputStream 获取网络字节流InputStream对象
 *  5. 使用网络字节输入流InputStream对象中的read方法,读取服务器回写的数据
 *  6. 释放资源
 */
public class TCPClient {
    public static void main(String[] args) throws IOException {
        //1.创建一个客户端对象 Socket 构造方法绑定服务器的IP和端口号, 用本地做测试,也可以换成你的服务器IP
        Socket socket = new Socket("127.0.0.1", 8888);
        //2.使用Socket对象中的方法OutputStream() 获取网络字节输出流
        OutputStream outputStream = socket.getOutputStream();
        //3.使用网络字节流OutputStream对象中的方法write 向服务器发送数据
        outputStream.write("hello world".getBytes());
        //4.
        InputStream inputStream = socket.getInputStream();
        //5
        byte[] bytes = new byte[1024];
        int len = inputStream.read(bytes);
        System.out.println(new String(bytes, 0, len));
        //6/
        socket.close();
    }
}
相关文章
|
7月前
|
人工智能 搜索推荐 程序员
用 Go 语言轻松构建 MCP 客户端与服务器
本文介绍了如何使用 mcp-go 构建一个完整的 MCP 应用,包括服务端和客户端两部分。 - 服务端支持注册工具(Tool)、资源(Resource)和提示词(Prompt),并可通过 stdio 或 sse 模式对外提供服务; - 客户端通过 stdio 连接服务器,支持初始化、列出服务内容、调用远程工具等操作。
1721 4
|
8月前
|
Java Linux 定位技术
Minecraft配置文件参数说明(JAVA服务器篇)
Minecraft JAVA版服务器启动后会生成server.properties配置文件,位于minecraft_server/根目录下。该文件包含多项关键设置,如游戏模式(gamemode)、最大玩家数(max-players)、难度(difficulty)等。此文档详细说明了各配置项的功能与默认值,帮助用户高效管理服务器环境。
1891 60
|
8月前
|
网络协议 开发者 Python
Socket如何实现客户端和服务器间的通信
通过上述示例,展示了如何使用Python的Socket模块实现基本的客户端和服务器间的通信。Socket提供了一种简单且强大的方式来建立和管理网络连接,适用于各种网络编程应用。理解和掌握Socket编程,可以帮助开发者构建高效、稳定的网络应用程序。
404 10
|
8月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
10月前
|
存储 开发工具 git
[Git] 深入理解 Git 的客户端与服务器角色
Git 的核心设计理念是分布式,每个仓库既可以是客户端也可以是服务器。通过 GitHub 远程仓库和本地仓库的协作,Git 实现了高效的版本管理和代码协作。GitHub 作为远程裸仓库,存储项目的完整版本历史并支持多客户端协作;本地仓库则通过 `.git` 文件夹独立管理版本历史,可在离线状态下进行提交、回滚等操作,并通过 `git pull` 和 `git push` 与远程仓库同步。这种分布式特性使得 Git 在代码协作中具备强大的灵活性和可靠性。
255 18
[Git] 深入理解 Git 的客户端与服务器角色
|
11月前
|
缓存 网络协议 Java
【JavaEE】——TCP回显服务器(万字长文超详细)
ServerSocket类,Socket类,PrintWriter缓冲区问题,Socket文件释放问题,多线程问题
|
11月前
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
2500 16
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
网络协议 Java Windows
JAVA通信编程(一)——串口通讯
  博主结合实际经验,决定总结下JAVA通讯编程的一些小知识,希望能给给位读者有些帮助。这里的JAVA通讯编程主要是指如何应用JAVA编写串口、TCP以及UDP的通讯程序。本片主要讲述的是串口通讯。
2088 0
|
Java Linux Windows
JAVA通信编程(五)——串口通讯的补充说明
在《JAVA通讯编程(一)——串口通讯》中讲述了如何采用JAVA进行串口通讯,我们采用的是引入RXTXComm.jar的方式,关于这个我有两点需要说明补充。 首先,现在的笔记本一般都不带串口,需要usb转串口之类的工具才能进行通讯,这样对调试程序非常的不方便,所以在windows操作系统下我们选择采用VSPD(Virtual Serial Port Driver)虚拟串口,VSPD对虚拟串口的序号没有限制,理论上可以创建无数个。
1797 0
|
1月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
117 1