zoukankan      html  css  js  c++  java
  • OSI七层模型与TCP/UDP初识

    OSI七层模型包括:其作用在于不断地给传输的内容加东西
    应用层
    表示层
    会话层
    传输层 UDP/TCP    +端口
    网络层 ip协议,      +ip地址
    数据链路层 以太网协议 +mac
    物理层 电信号

    传输层涉及到的:tcp协议:面向链接(打电话),不丢。建立了一个全双工的通道;传输是面向字节流的
                                  udp协议:面向无连接(写信),可能会丢。传输是面向报文、数据包的

    重点:tcp协议的三次握手,四次挥手
    挥手
    1客户端先发,申请建立链接
    2服务端收到后回馈,发送确认信息
    3客户端收到后表示收到
    握手
    1客户端请求
    2服务端说我收到,请稍等
    3服务端处理数据,全部结束后,发我已结束,不会丢失
    4客户端说,好,那咱断开

    tcp与udp下的socket 差一个监听与确认链接的过程

    TCP的多人聊天在listen后面在参数表示最大的等待数量,必须一客户端的链接断开了后面的才能进行
    UDP的多人聊天如果同时发,服务端回复第一个才会收到第二个人发来的消息

    服务端

    import socket
    #导入socket模块
    
    server = socket.socket()      #创建socket对象
    
    ip_port = ('121.195.167.34',8002)   #设置一个ip地址和端口号
    
    server.bind(ip_port)          #绑定ip和端口号
    
    server.listen(3)               #监听ip和端口号
    while 1:
        conn,addr = server.accept()   #等待建立连接,前者为建立的连接通道,后者为客户端地址
        while 1:
            from_client_msg = conn.recv(1024)  #通过recv方法,参数是字节(b),1024即为1kb,指一次性接受的消息大小
    
            print(from_client_msg.decode('utf-8'))
            if from_client_msg.decode('utf-8') == '再见':
                break
            send_client_msg = input('服务端说:')
            #conn.send(b'replay'.encode('utf-8'))   #回复消息,通过send方法,参数必须是字节类型
            conn.send(send_client_msg.encode('utf-8'))
        conn.close()           #关闭通道,通过close方法
    
    #server.close()         #关闭服务器

    客户端

    import socket
    import time
    client = socket.socket()   #创建一个socket对象
    
    server_ip_port = ('121.195.167.34',8002)  #找ip和端口号
    
    client.connect(server_ip_port)  #利用ip和端口号连接服务器程序
    while 1:
        send_server_msg = input('客户端说:')
        if send_server_msg == '再见':
            client.send(send_server_msg.encode('utf-8'))
            break
        client.send(send_server_msg.encode('utf-8'))     #发消息,用send方法,字节类型
        #client.send('你好'.encode('utf-8'))     #中文
        # client.send(str(time.time()).encode('utf-8'))
    
        from_server_msg = client.recv(1024)  #通过recv方法,参数是字节(b),1024即为1kb,指一次性接受的消息大小
    
        print(from_server_msg.decode('utf-8'))
    
    client.close()
  • 相关阅读:
    线性筛法(欧拉筛法)求素数
    07 day 2
    07 DAY 1
    二模 06day2
    刷水题记(2)
    The Perfect Stall (incomplete)
    离散化的应用:矩形覆盖问题
    刷水题记(1)
    发个题目坑 二模03day1
    hdu 5996 dingyeye loves stone(博弈)
  • 原文地址:https://www.cnblogs.com/shachengcc1/p/11273363.html
Copyright © 2011-2022 走看看