zoukankan      html  css  js  c++  java
  • 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前设置。

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 传球游戏
    Java实现 蓝桥杯VIP 算法训练 Hanoi问题
    Java实现 蓝桥杯VIP 算法训练 蜜蜂飞舞
    Java实现 蓝桥杯VIP 算法训练 奇偶判断
    Java实现 蓝桥杯VIP 算法训练 传球游戏
    Java实现 蓝桥杯VIP 算法训练 Hanoi问题
    Java实现 蓝桥杯VIP 算法训练 Hanoi问题
    Java实现 蓝桥杯VIP 算法训练 蜜蜂飞舞
    Java实现 蓝桥杯VIP 算法训练 蜜蜂飞舞
    Qt: 访问容器(三种方法,加上for循环就四种了)good
  • 原文地址:https://www.cnblogs.com/Thui/p/10003412.html
Copyright © 2011-2022 走看看