• python3 实现tcp/udp局域网通信


    1、tcp和udp的关系

      tcp/ip是一个协议组,它可以分为四个部分,分别是:链路层、网络层、传输层、应用层

      tcp和udp同属于tcp/ip的传输层

      tcp是基于连接的协议,也就是说,在正式发送数据前,必须简历可靠的连接。tcp建立连接时需要进行三次握手,关闭连接时需要进行四次挥手,这就好像是在打电话一样。

      udp是面向非连接的,它不要要和对方建立连接,而是直接把数据包发送过去,他不需要进行三次握手和四次挥手,这就好像写信一样,相对不可靠。

    2、tcp和udp的使用场合

      udp使用场合

        对效率要求相对高,对准确性要求相对低的场景。udp一般用于即时通信、在线视频、网络语音电话

      tcp使用场合

        对效率要求相对低,对准确性要求相对高的场景,或者是要求有连接的场景。tcp一般用于文件传输协议(ftp、http)、发送或接收邮件(pop、 smtp)、远程登陆(telnet、ssh)

    3、udp的简单实现

    # 导入socket套接字
    import socket
    # 创建udp套接字
    udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    # 绑定端口和ip
    udp_socket.bind(('', 8000))
    # 设置允许广播
    udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    # 获取用户需要发送的内容
    mess = input("enter the information you want to send:")
    # 定义目标地址
    dest_addr = ("255.255.255.255", 8000)
    # 发送输入的数据到指定的ip,255.255.255.255表示广播
    udp_socket.sendto(mess.encode(), dest_addr)
    # 接收1024个字节的数据
    recv_data, recv_addr = udp_socket.recvfrom(1024)
    # 打印接收到的数据,因为接收到的数据来自windows,所以需要使用gbk解码
    print(recv_data.decode("gbk"))
    # 关闭套接字
    udp_socket.close()

    4、tcp的简单实现

    # 服务器端
    # 导入socket套接字
    import socket
    # 创建tcp套接字
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    # 绑定本地ip和端口
    server_socket.bind(("",8080))
    # 设置监听状态,1表示统一时刻只能有一个链接
    server_socket.listen(1)
    # 等待客户端链接
    client_socket, client_addr = server_socket.accept()
    # 设置返回的信息,如果这样返回的话,使用浏览器访问将出现hellworld,因为http协议也是基于tcp的
    mess = "HTTP/1.1 200 OK
    
    hello world"
    # 给客户端套接字发送数据
    client_socket.send(mess.encode())
    # 接受1024个字节的数据
    recv_data = client_socket.recv(1024)
    # 打印数据并解编码
    print(recv_data.decode("gbk"))
    # 关闭客户端套接字
    client_socket.close()
    # 关闭服务器套接字
    server_socket.close()
    # tcp客户端
    # 导入socket套接字
    import socket
    # 创建tcp套接子
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 建立链接
    client_socket.connect(("192.168.217.1", 8080))
    # 获取需要发送的数据
    send_data = input("enter you need to send:")
    # 发送数据
    client_socket.send((send_data.encode()))
    # 接收1024个字节的数据
    recv_data = client_socket.recv(1024)
    # 打印数据,因为是windows,所以需要gbk解码
    print(recv_data.decode("gbk"))
    # 关闭套接字
    client_socket.close()

      

  • 相关阅读:
    后台执行linux命令
    日志
    配置文件
    后台
    后台代码注释
    递归建立文件夹
    图片合成
    java.awt.Font
    java-日期取特定值
    linux乱码
  • 原文地址:https://www.cnblogs.com/wangqj1996/p/9628420.html
Copyright © 2020-2023  润新知