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();
    }
}
相关文章
|
13天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
32 2
|
10天前
|
Java Linux
java读取linux服务器下某文档的内容
java读取linux服务器下某文档的内容
25 3
java读取linux服务器下某文档的内容
|
1天前
|
Java
用java实现Client和Server之间的互相通信
本文介绍了如何使用Java实现客户端和服务器之间的通信,包括服务器端创建ServerSocket、接受客户端连接、读取和发送消息,以及客户端创建Socket连接、发送和接收消息的完整过程。
6 0
用java实现Client和Server之间的互相通信
|
12天前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
26 4
|
21天前
|
Kubernetes Java Maven
揭秘无服务器革命:Quarkus如何让Java应用在云端“零”负担起飞?
本文介绍如何使用Quarkus从零开始开发无服务器应用,通过示例代码和详细步骤引导读者掌握这一技术。无服务器架构让开发者无需管理服务器,具有自动扩展和成本效益等优势。Quarkus作为Kubernetes Native Java框架,优化了Java应用的启动速度和内存使用,适合无服务器环境。文章涵盖环境搭建、项目创建及部署全流程,并介绍了Quarkus的扩展性和监控工具,助力高效开发与应用性能提升。
27 9
|
1天前
|
网络协议 Python
Python创建一个TCP服务器
Python创建一个TCP服务器
|
1天前
|
存储 监控 NoSQL
Redis的实现二: c、c++的网络通信编程技术,让服务器处理多个client
本文讨论了在C/C++中实现服务器处理多个客户端的技术,重点介绍了事件循环和非阻塞IO的概念,以及如何在Linux上使用epoll来高效地监控和管理多个文件描述符。
9 0
|
15天前
|
传感器 网络协议 Java
三大硬核方式揭秘:Java如何与底层硬件和工业设备轻松通信!
大家好,我是V哥。最近与一位从事工业互联网项目的学员交流,启发我分享Java如何与底层硬件和工业设备通信。本文将介绍三种方法:1)使用`jLibModbus`库通过Modbus协议读取设备寄存器数据;2)使用JNI(Java Native Interface)直接访问硬件;3)使用`JSerialComm`库通过串口通信读取数据。每种方法都有详细步骤和示例代码,帮助你轻松实现与硬件设备的通信。无论是工业自动化还是物联网应用,这些方法都能派上用场。欢迎关注和支持!
|
1月前
|
Cloud Native Java 编译器
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
随着云计算技术的不断发展,云服务商们不断推出高性能、高可用的云服务器实例,以满足企业日益增长的计算需求。阿里云推出的倚天实例,凭借其基于ARM架构的倚天710处理器,提供了卓越的计算能力和能效比,特别适用于云原生、高性能计算等场景。然而,有的用户需要将传统基于x86平台的应用迁移到倚天实例上,本文将介绍如何将基于x86架构平台的应用迁移到阿里云倚天实例的服务器上,帮助开发者和企业用户顺利完成迁移工作,享受更高效、更经济的云服务。
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
|
1天前
|
运维 负载均衡 Linux
阿里云轻量服务器最新收费标准与价格参考
阿里云轻量服务器具有灵活的镜像选择、快速上手、简便运维等优势,轻量服务器适合个人开发者和学生用来搭建网站、云端学习等场景使用,2024年截至目前国内地域有60元/月、80元/月等套餐可选,国外地域有24元/月、34元/月、67元/月等套餐可选,目前轻量应用服务器2核2G3M带宽82元1年、2核4G4M带宽298元1年。