• 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):将对象写入输出流。

    程序简单设计

    客户端设计(后启动)

    1. public class TCPClient {
    2. public static void main(String[] args) throws IOException {
    3. //创建嵌套字并连接服务端
    4. Socket socket=new Socket("127.0.0.1",10000);
    5. //获取嵌套字中的输出流,并发送数据
    6. OutputStream os = socket.getOutputStream();
    7. String message="hello tcp server";
    8. byte[] data=message.getBytes();
    9. //因为连接已经建立成功,直到往该连接(socket)的输出流里面写数据,服务端就能收到
    10. os.write(data,0,data.length);
    11. //获取嵌套字中的输入流,处理响应数据
    12. InputStream is = socket.getInputStream();
    13. byte[] buffer=new byte[1024];
    14. //堵塞当前进程,直到IO完成读取数据
    15. int length=is.read(buffer);
    16. String response=new String(buffer,0,length);
    17. System.out.println("服务端响应: "+response);
    18. //关闭连接
    19. socket.close();
    20. }
    21. }

    服务端设计(先启动)

    1. public class TCPServer {
    2. public static void main(String[] args) throws IOException {
    3. //创建服务端嵌套字并监听指定端口
    4. ServerSocket serverSocket=new ServerSocket(10000);
    5. System.out.println("服务器已启动,等待客户端连接...");
    6. //监听客户端的链接(直接堵塞当前进程,知道完成与客户端的连接)
    7. Socket clientSocket = serverSocket.accept();
    8. //处理客户端请求
    9. System.out.println("客户端已连接");
    10. InputStream is = clientSocket.getInputStream();
    11. byte[] buffer=new byte[1024];
    12. int len=is.read(buffer);//读取缓存中的数据并返回数据长度
    13. String request=new String(buffer,0,len);
    14. System.out.println("客户端请求: "+request);
    15. //发送数据到客户端
    16. OutputStream os = clientSocket.getOutputStream();
    17. String message="Hello tcp Client";
    18. byte[] data = message.getBytes();
    19. os.write(data,0,data.length);
    20. //关闭连接
    21. clientSocket.close();
    22. serverSocket.close();
    23. }
    24. }

  • 相关阅读:
    每章一篇博客带你拿下吉林大学JAVAEE期末(三:JSP)
    除铜树脂-KF340
    ftp多用户多目录配置
    MyBatis之动态SQL
    springboot+vue项目部署配置开机自启动
    Redis 学习笔记 3:黑马点评
    项目管理小技能:计划的三个关键动作(对资源的取舍、共识计划、识别风险)
    .NET Emit 入门教程:第一部分:Emit 介绍
    vuejs3+elementPlus后台管理系统,左侧菜单栏制作,跳转、默认激活菜单
    驱动开发:内核监控Register注册表回调
  • 原文地址:https://blog.csdn.net/DU9999999/article/details/133618420