• 套接字


    套接字

    返回首页

    客户端/服务器架构

    Server端:

      1、要一直提供服务。

      2、要绑定一个唯一的地址,让客户端能都明确的找到。

    基于网络通讯的套接字分为TCP协议工作的和UDP协议工作的。

    TCP协议工作:

    服务端:

    import socket
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #买手机 AF_INET基于网络通讯的套接字,SOCK_STREAM基于TCP协议的套接字
    phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #就是它,在bind前加,SO_REUSEADDR是重置
    phone.bind(('127.0.0.1',8080)) #绑定手机卡,服务端ip
    
    phone.listen(5) #开机  ?5
    print('starting....')
    
    while True: #链接循环
        conn,addr=phone.accept() #等待电话链接
        print('电话线路是',conn)
        print('客户端的手机号是',addr)
    
        while True: #通信循环
            try: #应对windows系统
                data=conn.recv(1024) #收消息  ?1024
                if not data:break #linux系统
                print('客户端发来的消息是',data)
                conn.send(data.upper()) #发给客户端的消息
            except Exception:
                break
        conn.close()
    
    phone.close()

    客户端

    import socket
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    phone.connect(('127.0.0.1',8080))
    
    while True: #通信循环
        msg=input('>>: ').strip()
        if not msg:continue
        phone.send(msg.encode('utf-8'))  #发送的
        print('has send===========>',msg)
        data=phone.recv(1024) #收到的
        print('has recv===========>',data)
        print(data)
    
    phone.close()

    UDP协议工作的套接字:

      UDP用户数据报协议,是无连接的,面向消息的,提供高效率服务,不会使用块的合并优化算法,由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包,在每个UDP包中就有了消息头(消息来源地址,端口等信息),这样,对于接收端来说,就容易进行区分处理了,即面向消息的通信是有消息保护边界的。

    Server端:

    import socket
    
    udpserver=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    udpserver.bind(('127.0.0.1',8080))
    
    while True: #通讯循环
        data,client_addr=udpserver.recvfrom(1024)
        print('======>',data.decode('utf-8'))
        print(client_addr)
        msg=input('>>: ')
        # udpserver.sendto(data.upper(),client_addr)
        udpserver.sendto(msg.encode('utf-8'),client_addr)

    Client端:

    import socket
    
    udpclient=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    
    server_ip_port=('127.0.0.1',8080)
    while True:
        inp=input(">>: ")
        udpclient.sendto(inp.encode('utf-8'),server_ip_port)
    
        data,server_addr=udpclient.recvfrom(1024)
        print(data.decode('utf-8'))

    ---------- END ----------

  • 相关阅读:
    Postman使用教程
    CAD和ArcGIS转换 矢量配准
    SAP CRM Advanced search和Simple search里Max hit表现行为的差异
    SAP CRM Product simple search的启用步骤
    如何快速定位SAP CRM订单应用(Order Application)错误消息抛出的准确位置
    如何动态修改SAP CRM WebClient UI表格栏的宽度
    如何在SAP CRM WebClient UI里创建web service并使用ABAP消费
    如何处理SAP CRM Web Service错误
    如何使用SAP CRM WebClient UI实现一个类似新浪微博的字数统计器
    如何开启SAP CRM基于WORD模板创建附件的功能
  • 原文地址:https://www.cnblogs.com/george92/p/14864376.html
Copyright © 2020-2023  润新知