• python 基础(十五) socket编程


    SOCKET

    TCP协议:

    有请求 有响应 称之为 tcp协议

    是面向连接的协议 就是在收发数据之前 必须先要建立一个可靠的链接 三次握手

    如:网站

    UDP协议:

    是一个非链接的协议 传输之前不需要键连接

    如:qq,飞秋

    socket概念:

    Socket又称套接字 向网络发出请求 或者应答网络请求 可以实现在一台计算机上不同的进程进行通信

    二、socket使用

    import socket
    socket.socket(family,type)

    参数:

    • family: AF_UNIX或者是AF_INET

      AF_INET 使用的IPV4

      AF_UNIX 不走网络层的 也不需要进行数据的解密 使用于传输大量数据

    • type:

      SOCKET_STREAM (TCP链接)

      SOCKET_DGRAM (UDP链接)

    三、创建udp的客户端和服务端

    (1) 服务端

    实例

    import socket
    udpServer = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #第一个为ipv4  第二个选择udp
    udpServer.bind(("127.0.0.1",8868)) #绑定IP 和端口号 让别人通过这个地址和端口号请求到当前的服务
    data,addr = udpServer.recvfrom(1024) #接收发送过来的数据 最大1kb 返回数据和对方的地址  
    print("客户端发送的消息的内容为{} 地址为{}".format(data,addr))
    #在运行以后会阻塞 等待对方的请求
     

    (2) 客户端

    实例

    import socket
    udpClient = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    while True:
        data = input('请输入内容')
        udpClient.sendto(data.encode('utf-8'),("127.0.0.1",8868))
     

    四、TCP服务端和客户端

    (1) 服务端

    实例

    import socket
    #TCP
    tcpServer = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    tcpServer.bind(("127.0.0.1",8878))
    tcpServer.listen(5) #超过5人链接服务端  后面的人排队 阻塞
    clientSock,addr = tcpServer.accept() #当前等待链接 阻塞模式
    while True:
        data = clientSock.recv(1024) #接收客户端的数据
        print('接收客户端的信息为{}'.format(data.decode('utf-8')))
        serverData = input("请输入回复信息")
        clientSock.send(serverData.encode('utf-8')) #回复客户端的数据
     

    (2) 客户端

    import socket
    tcpClient = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    tcpClient.connect(("127.0.0.1",8878)) #链接tcp服务端
    while True:
        data = input("请输入写给服务端的内容")
        tcpClient.send(data.encode('utf-8')) #客户端给服务端发送数据
        serverData = tcpClient.recv(1024) #接收服务端传递过来的数据
        print("对方回复的消息为:",serverData.decode('utf-8')) #显示数据

    五、通过socket请求网址

    实例

    import socket
    #建立TCP协议
    # print(socket.gethostbyname('www.baidu.com')) #通过域名获取 IP地址
    tcpClient = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #建立链接
    tcpClient.connect(('www.id97.com',80))
    tcpClient.send(b'GET / HTTP/1.1
    Host: www.id97.com
    Connection: close
    
    ')
    dataList = []
    while True:
        data = tcpClient.recv(1024)
        if not data:
            break
        dataList.append(data)
    f = open('id97com.html','wb')
    f.writelines(dataList)
    f.close()
     
  • 相关阅读:
    git常用命令
    IDEA设置
    redis基础
    SQL 基础
    springboot 配置日志 打印不出来sql
    阿里巴巴开发规范最新版
    rabbitmq用户权限
    rabbitMQ配置文件
    RabbitMQ配置文件(rabbitmq.conf)
    C++模板编程:如何使非通用的模板函数实现声明和定义分离
  • 原文地址:https://www.cnblogs.com/gugubeng/p/9715656.html
Copyright © 2020-2023  润新知