• TCP编程


    TCP编程

    在实际应用中TCP网络程序提供可靠的数据通信,而UDP网络程序则不保证数据的可靠性,但是协议简单、传输速度快(比如用在音视频数据传输,它们不需要很高的可靠性,偶尔丢帧是可以忍受的)

    - TCP是Tranfer Control Protocol的 简称,是一种面向连接的端对端的保证可靠传输的协议。
    - 通过TCP协议传输,得到的是一个顺序的无差错的数据流。

    发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送 或接收操作。

    Socket概述

    Socket套接字,就是两台主机之间逻辑连接的端点。TPC协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。Socket本质上就是一组接口,是对TCP/IP协议的封装和应用(程序员层面上)

    Socket编程主要涉及到客户端和服务器端两个方面,首先是在服务器端创建一个服务器套接字ServerSocket,并把它附加到一个端口上,服务器从这个端口监听连接。端口号的范围是0到65536,但是0到1024是为特权服务保留的端口号,我们可以选择任意一个当前没有被其他进程使用的端口。

    客户端请求与服务器进行连接的时候,根据服务器的域名或者IP地址,加上端口号,打开一个套接字。当服务器接受连接后,服务器和客户端之间的通信就像输入输出流一样进行操作。

    Socket整体流程

    Socket编程主要涉及到客户端和服务端两个方面,首先是在服务器端创建一个服务器套接字ServerSocket,并把它附加到一个端口上,服务器从这个端口监听连接。端口号的范围是0到65536,但是0到1024是为特权服务保留的端口号,我们可以选择任意一个当前没有被其他进程使用的端口。

    客户端请求与服务器进行连接的时候,根据服务器的域名或者IP地址,加上端口号,打开一个套接字。当服务器接受连接后,服务器和客户端之间的通信就像输入输出流一样进行操作。 

    ServerSocket类

    Java.net包中的ServerSocket类用于表示服务器套接字,其主要功能是监听客户端的请求,然后将客户端的请求连接存入队列中,默认请求队列大小是50。

    构造方法主要有以下几种形式:

    - ServerSocket():创建非绑定服务器套接字。
    - **ServerSocket(int port)**:创建绑定到特定端口的服务器套接字。Port的取值范围为0-65535之间,0表示使用任意未占用端口,建议使用的端口号大于1024。如果端口已经被占用则会BindException
    - ServerSocket(int port,int backlog):利用指定的backlog创建服务器套接字并将其绑定到指定的本地端口号。
    - ServerSocket(int port,int backlog,InetAdress bindAddress):使用指定的端口、监听backlog和要绑定到本地IP地址创建服务器,适用于计算机有多个网卡、多个IP的情景

    端口扫描

    1.  //利用的是ServerSocket在创建时,如果端口已经被占用,则报异常
    2.     for(int i=0;i<=65535;i++) { //端口号0表示使用自由端口,实际上是不能建立连接的
    3.         try {
    4.             ServerSocket ss=new ServerSocket(i);
    5.             ss.close();  //finally
    6.         } catch (Exception e) {
    7.             System.out.println("端口"+i+"已经被占用");
    8.         }
    9.     }

    cmd命令查看端口使用情况`netstat -an`

    - LISTENING是指开放着的,等待连接的
    - ESTABLISHED是正在连接
    - CLOSE_WAIT、TIME_WAIT、SYN_SENT是三次握手四次挥手过程中的某些状态

    开放端口包括三种:

    - 0.0.0.0:端口号
    - 127.0.0.1:端口号
    - 主机ip:端口号

    区别是0.0.0.0和主机ip后面跟的端口号是对外部网络开放的,是可以通过服务域名、ip可以访问的端口,而127.0.0.1的端口则是只供本机访问的端口。

    客户端Socket的构造器

    Socket(InetAddress address, int port);创建远程连接到指定服务器

    Socket(String host, int prot); 在客户端构建Socket对象,如果构建成功则获取对象,否则ConnectException。参数1为链接主机的名称,也可以使用InetAddress表示IP地址;参数2为链接服务器的监听端口号,要求服务器已经打开的链接端口

    Socket(String host, int port, InetAddress localAddr, int localPort)

    Socket(InetAddressaddress, int port, InetAddress localAddr, int localPort)

  • 相关阅读:
    PEO-PPO-SS-DTX聚合物胶束|PEG-PEI-PCL-SS-PLL|聚己内酯-紫杉醇高分子前药PTX-PCL(科研试剂)
    小程序开发平台源码系统+社区团购小程序功能 带完整的搭建教程
    解决webstrom ERROR in [eslint] ESLint is not a constructor
    cos文件上传demo (精简版通用)
    xlsx和csv格式有什么区别,在写程序时那种更方便操作呢
    (附源码)计算机毕业设计SSM健身房管理系统
    C++ -- 学习系列 static 关键字的使用
    DAO 的全景图:金融和社会资本之间的关系
    【PTHREAD】线程互斥与同步之读写锁
    Android13 实现有线网络和wifi共存
  • 原文地址:https://blog.csdn.net/weixin_50518344/article/details/127078423