• socket


    4. socket

    • 作用:Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
    • 基于TCP协议socket
    服务端:
    import socket
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #网络通信种类,tcp 协议 流式协议
    print(phone)
    phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #重新用端口
    # 本地回环地址,用于测试,只能自己访问
    phone.bind(('127.0.0.1',8080))  #固定IP 端口
    phone.listen(5)    #半连接池
    
    #等待消息
    print('start..')
    while True :
        conn,client_addr=phone.accept()   #(三次握手建立双向链接,(客户端的IP,端口)
        print('链接成功')  #客户端运行,服务端打印此信息
        print(client_addr)  #客户端地址
        print(conn)  # 套接字对象
    #通信
        while True :
            try:
                data=conn.recv(1024) #最大接受的字节数,没有数据会在原地一直等待收,即发送者发送的数据必须大于0bytes
                if len(data)== 0: break  #在客户端单方面断开链接,服务端出现收空数据的情况
                conn.send(data.upper())  #发消息
            except ConnectionResetError :    #win系统针对于解决客户端不发信息,服务端报错问题
                break
        conn.close()
    phone.close()
    
    客户端:
    import socket
    phone = socket .socket (socket .AF_INET ,socket .SOCK_STREAM )
    print(phone)
    
    phone.connect(('127.0.0.1',8080))  #指定服务端的IP和端口
    while True :
        msg = input('<<<')
        phone.send(bytes(msg,encoding= 'utf-8'))  #传输二进制
        data = phone.recv(1024)   #收消息
        print(data)
    
    phone.close()
    #步骤
    #(1)确认网络通信类型和协议 (2)指定服务端的IP和端口 (3)发收消息(4)关闭
    
    • 基于UDP协议的socket
    客户端:
    import socket
    server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #数据报协议-》udp
    server.bind(('127.0.0.1',8080))
    
    while True:
        data,client_addr=server.recvfrom(1024)
        print('===>',data,client_addr)
        server.sendto(data.upper(),client_addr)
    
    server.close()
    
    服务端:
    import socket
    client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #数据报协议-》udp
    while True:
        msg=input('>>: ').strip() #msg=''
        client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))
        data,server_addr=client.recvfrom(1024)
        print(data)
    
    client.close()
    
  • 相关阅读:
    Python 列表元素排重uniq
    Python正则表达式汇总
    Python 正则表达式:只要整数和小数
    c++写入txt文件
    OpenMP求完数
    Python分割list
    用ConfigParser模块读写配置文件——Python
    Python 正则表达式
    教程和工具--用wxPython编写GUI程序的
    matlab 之字体调整
  • 原文地址:https://www.cnblogs.com/quqinchao/p/11217638.html
Copyright © 2020-2023  润新知