• TCP通信-快速入门


    TCP通信模式演示

    注意:在java中只要是使用java.net.Socket类实现通信,底层即是使用了TCP协议。 

    Socket api

    public Socket(String host , int port) 创建发送端的Socket对象与服务端连接,参数为服务端程序的ip和端口。

    OutputStream getOutputStream()

    InputStream getInputStream()

    客户端发送消息

    创建客户端的Socket对象,请求与服务端的连接。

    使用socket对象调用getOutputStream()方法得到字节输出流。

    使用字节输出流完成数据的发送。

    释放资源:关闭socket管道。

    客户端代码

    1. /**
    2. 目标:完成Socket网络编程入门案例的客户端开发,实现1发1收。
    3. */
    4. public class ClientDemo1 {
    5. public static void main(String[] args) {
    6. try {
    7. System.out.println("====客户端启动===");
    8. // 1、创建Socket通信管道请求有服务端的连接
    9. // public Socket(String host, int port)
    10. // 参数一:服务端的IP地址
    11. // 参数二:服务端的端口
    12. Socket socket = new Socket("127.0.0.1", 7777);
    13. // 2、从socket通信管道中得到一个字节输出流 负责发送数据
    14. OutputStream os = socket.getOutputStream();
    15. // 3、把低级的字节流包装成打印流
    16. PrintStream ps = new PrintStream(os);
    17. // 4、发送消息
    18. ps.println("我是TCP的客户端,我已经与你对接,并发出邀请:约吗?");
    19. ps.flush();
    20. // 关闭资源。
    21. // socket.close();
    22. } catch (Exception e) {
    23. e.printStackTrace();
    24. }
    25. }
    26. }

    ServerSocket(服务端) API

    public ServerSocket(int port) 注册服务端端口。

    public Socket accept() 等待接收客户端的Socket通信连接, 连接成功返回Socket对象与客户端建立端到端通信。

    服务端实现接收消息

    创建ServerSocket对象,注册服务端端口。

    调用ServerSocket对象的accept()方法,等待客户端的连接,并得到Socket管道对象。

    通过Socket对象调用getInputStream()方法得到字节输入流、完成数据的接收。

    释放资源:关闭socket管道

    服务端代码

    1. /**
    2. 目标:开发Socket网络编程入门代码的服务端,实现接收消息
    3. */
    4. public class ServerDemo2 {
    5. public static void main(String[] args) {
    6. try {
    7. System.out.println("===服务端启动成功===");
    8. // 1、注册端口
    9. ServerSocket serverSocket = new ServerSocket(7777);
    10. // 2、必须调用accept方法:等待接收客户端的Socket连接请求,建立Socket通信管道
    11. Socket socket = serverSocket.accept();
    12. // 3、从socket通信管道中得到一个字节输入流
    13. InputStream is = socket.getInputStream();
    14. // 4、把字节输入流包装成缓冲字符输入流进行消息的接收
    15. BufferedReader br = new BufferedReader(new InputStreamReader(is));
    16. // 5、按照行读取消息
    17. String msg;
    18. if ((msg = br.readLine()) != null){
    19. System.out.println(socket.getRemoteSocketAddress() + "说了:: " + msg);
    20. }
    21. } catch (Exception e) {
    22. e.printStackTrace();
    23. }
    24. }
    25. }

    TCP通信的基本原理

    客户端怎么发,服务端就应该怎么收。

    客户端如果没有发消息,服务端会进入阻塞等待。

    Socket一方关闭或者出现异常、对方Socket也会失效或者出错。

  • 相关阅读:
    【python基础学习3】jupyter notebook 相关技巧学习
    minio安装与上传文件
    基于Android驾校驾考助手 java驾照考试系统
    docker文件过大,Docker容器引擎,迁移/var/lib/docker/到本机其它挂载分区或远程主机的某个分区。docker迁移
    Vue3 从入门到放弃 (第四篇.Props使用)
    java培训课程之页面中获取国际化资源信息
    单条视频播放近4000w,如何利用“跟风效应”实现流量暴增?
    实时天气API
    Vue基础:万字笔记,精华总结
    Springboot:统一异常处理
  • 原文地址:https://blog.csdn.net/daqi1983/article/details/133884052