当前位置: 首页 > news >正文

Java中的TCP通信(网络编程 二)

简介

TCP(传输控制协议)是一种在计算机网络中常用的协议,它提供了可靠的、面向连接的通信(协议信息链接:TCP协议)。在Java中,我们可以使用Socket和ServerSocket类来实现TCP通信。

Java TCP通信关键方法

客户端套接字(Socket)方法:

- Socket(String host, int port):使用指定的主机和端口创建一个客户端套接字。

- Socket(InetAddress address,int port):创建流套接字并将其连接到指定IP指定端口号

- void connect(SocketAddress endpoint):连接到指定的远程套接字地址。

- void setSoTimeout(int timeout):设置套接字的读取超时时间。

- boolean isConnected():检查套接字是否已连接。

- void close():关闭套接字连接。

服务器套接字(ServerSocket)方法:

- ServerSocket(int port):创建一个服务器套接字,绑定到指定的端口。

- Socket accept():侦听客户端的连接请求,并返回与客户端连接的套接字。

- void setSoTimeout(int timeout):设置服务器套接字的超时时间。

- boolean isBound():检查服务器套接字是否已绑定到特定端口。

- void close():关闭服务器套接字。

输入输出流方法(数据处理):

- InputStream getInputStream():返回与套接字关联的输入流。

- OutputStream getOutputStream():返回与套接字关联的输出流。

- void write(byte[] b):将字节数组中的数据写入输出流。

- int read(byte[] b):从输入流中读取数据并存储到字节数组中。

- void flush():刷新输出流,确保数据被发送。

- String readLine():从输入流中读取一行数据。

- void writeBytes(String s):将字符串以字节的形式写入输出流。

- void writeInt(int value):将整数写入输出流。

- int readInt():从输入流中读取整数。

- void writeObject(Object obj):将对象写入输出流。

程序简单设计

客户端设计(后启动)

public class TCPClient {
    public static void main(String[] args) throws IOException {
        //创建嵌套字并连接服务端
        Socket socket=new Socket("127.0.0.1",10000);
        //获取嵌套字中的输出流,并发送数据
        OutputStream os = socket.getOutputStream();
        String message="hello tcp server";
        byte[] data=message.getBytes();
        //因为连接已经建立成功,直到往该连接(socket)的输出流里面写数据,服务端就能收到
        os.write(data,0,data.length);

        //获取嵌套字中的输入流,处理响应数据
        InputStream is = socket.getInputStream();
        byte[] buffer=new byte[1024];
        //堵塞当前进程,直到IO完成读取数据
        int length=is.read(buffer);
        String response=new String(buffer,0,length);
        System.out.println("服务端响应: "+response);

        //关闭连接
        socket.close();
    }
}

服务端设计(先启动)

public class TCPServer {
    public static void main(String[] args) throws IOException {
        //创建服务端嵌套字并监听指定端口
        ServerSocket serverSocket=new ServerSocket(10000);
        System.out.println("服务器已启动,等待客户端连接...");

        //监听客户端的链接(直接堵塞当前进程,知道完成与客户端的连接)
        Socket clientSocket = serverSocket.accept();

        //处理客户端请求
        System.out.println("客户端已连接");
        InputStream is = clientSocket.getInputStream();
        byte[] buffer=new byte[1024];
        int len=is.read(buffer);//读取缓存中的数据并返回数据长度
        String request=new String(buffer,0,len);
        System.out.println("客户端请求: "+request);

        //发送数据到客户端
        OutputStream os = clientSocket.getOutputStream();
        String message="Hello tcp Client";
        byte[] data = message.getBytes();
        os.write(data,0,data.length);

        //关闭连接
        clientSocket.close();
        serverSocket.close();
    }
}

相关文章:

  • 使用华为eNSP组网试验⑷-OSPF多区域组网
  • 完美清晰,炫酷畅享——Perfectly Clear Video为你带来卓越的AI视频增强体验
  • Python之字符串格式化
  • 【Django 笔记】第一个demo
  • Linux-正则三剑客
  • 怎么将Linux上的文件上传到github上
  • 总结二:linux面经
  • PyTorch入门之【AlexNet】
  • [React源码解析] React的设计理念和源码架构 (一)
  • JMeter性能测试
  • [架构之路-228]:目标系统 - 纵向分层 - 计算机硬件与体系结构 - 硬盘存储结构原理:如何表征0和1,即如何存储0和1,如何读数据,如何写数据(修改数据)
  • 【17】c++设计模式——>原型模式
  • Raid10--Raid01介绍
  • 华为云云耀云服务器L实例评测|基于canal缓存自动更新流程 SpringBoot项目应用案例和源码
  • 关于Go语言的底层,Slice,map
  • 博弈论——伯特兰德寡头模型(Bertrand Model)
  • 利用fitnesse实现api接口自动化测试
  • Waves 14混音特效插件合集mac/win
  • 目前制造企业生产计划现状是什么?有没有自动化排产系统?
  • minio分布式文件存储
  • 美国务卿鲁比奥将前往土耳其参加俄乌会谈
  • 市场监管总局等五部门约谈外卖平台企业
  • 习近平致电祝贺阿尔巴尼斯当选连任澳大利亚总理
  • 在对国宝的探索中,让美育浸润小学校园与家庭
  • 2025年上海好护士揭晓,上海护士五年增近两成达12.31万人
  • 75万采购防火墙实为299元路由器?重庆三峡学院发布终止公告:出现违法违规行为