• python-day27(三次握手,四次挥手)


    一. Osi七层

    二.  三次握手 四次挥手(重点)

    3次握手: A约吗>>>B约啊>>>A收到

    4次挥手: A分手吧>>>B让我考虑下>>>.B分吧>>>>A再见

    三. Tcp和Udp的区别

      TCP(Transmission Control Protocol)可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。

        使用TCP的应用:Web浏览器;文件传输程序。

      UDP(User Datagram Protocol)不可靠的、无连接的服务,传输效率高(发送前时延小),一对一、一对多、多对一、多对多、

        面向报文(数据包),尽最大努力服务,无拥塞控制。使用UDP的应用:域名系统 (DNS);视频流;IP语音(VoIP)。

    四. Tcp和Udp协议下socket撰写方式

     Tcp服务端,客户端

     1 import socket
     2 
     3 server = socket.socket()
     4 ip_port = ('192.168.15.46',8001)
     5 server.bind(ip_port)
     6 
     7 server.listen()
     8 
     9 conn,addr = server.accept()
    10 
    11 while 1:
    12     server_msg = input('wulaoban>>')
    13     server_msg = server_msg.encode('utf-8')
    14     conn.send(server_msg)
    15 
    16     from_client_msg = conn.recv(1024) #1024是一次性最大能接收的消息长度
    17     from_client_msg = from_client_msg.decode('utf-8')
    18     print(from_client_msg)
    19 
    20 conn.close()
    21 server.close()
    View Code
     1 import socket
     2 
     3 client = socket.socket()
     4 
     5 server_ip_port = ('192.168.15.46',8001)
     6 
     7 client.connect(server_ip_port)
     8 
     9 while 1:
    10     from_server_msg = client.recv(1024)
    11     from_server_msg = from_server_msg.decode('utf-8')
    12     print('来自服务端的消息',from_server_msg)
    13     client_msg = input('客户端>>>>')
    14     client_msg = client_msg.encode('utf-8')
    15     client.send(client_msg)
    View Code

    Udp服务端,客户端

     1 import socket
     2 
     3 udp_server = socket.socket(type=socket.SOCK_DGRAM)  #datagram 数据包的意思
     4 ip_port = ('192.168.15.49',8001)
     5 udp_server.bind(ip_port)
     6 print(1111)
     7 from_client_msg,server_addr = udp_server.recvfrom(1024) #消息数据类型都是bytes类型,阻塞
     8 print(22222)
     9 print(from_client_msg.decode('utf-8'))
    10 print(server_addr)
    11 udp_server.sendto(b'hello what?',server_addr)
    12 
    13 
    14 udp_server.close()
    View Code
     1 import socket
     2 
     3 udp_client = socket.socket(type=socket.SOCK_DGRAM)
     4 server_ip_port = ('192.168.15.49',8001)
     5 
     6 udp_client.sendto(b'hello',server_ip_port) #c参数1:发送的消息,参数2往哪里发,对方的地址
     7 
     8 from_server_msg,server_addr = udp_client.recvfrom(1024)
     9 
    10 print(from_server_msg.decode('utf-8'))
    11 udp_client.close()
    View Code

    五. 缓冲区

      

    SO_RCVBUF和SO_SNDBUF每个套接口都有一个发送缓冲区和一个接收缓冲区,使用这两个套接口选项可以改变缺省缓冲区大小。

    // 接收缓冲区
    int nRecvBuf=32*1024; //设置为32K
    setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
    //发送缓冲区
    int nSendBuf=32*1024;//设置为32K
    setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));

    注意:当设置TCP套接口接收缓冲区的大小时,函数调用顺序是很重要的,因为TCP的窗口规模选项是在建立连接时用SYN与对方互换得到的。对于客 户,O_RCVBUF选项必须在connect之前设置;对于服务器,SO_RCVBUF选项必须在listen前设置。

  • 相关阅读:
    Visual Stdio VS 错误 error : 0xC00000FD: Stack overflow. 更改堆栈空间解决栈溢出问题
    OpenCV Mat 只能用静态数组定义时初始化,动态数组赋值给Mat需要逐元素进行. MATLAB,OpenCV,VS混合编程
    【转】Ubuntu 10.10升级显卡驱动后开机动画低分辨率问题
    linux 文件[名]编码
    L337 Speak及国外论坛、IRC常用缩写
    UCS2 手机SMS的PDU编码
    setuid
    【转】CentOS5.5硬盘安装
    SWT CTabFolder 简记
    [转] 程序员的十层楼
  • 原文地址:https://www.cnblogs.com/Thui/p/10003412.html
Copyright © 2020-2023  润新知