zoukankan      html  css  js  c++  java
  • 套接字

    套接字

    返回首页

    客户端/服务器架构

    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 ----------

  • 相关阅读:
    Opencv 图像矩
    Opencv Convex Hull (凸包)
    Opencv 发现轮廓 findContours
    Opencv Match Template(轮廓匹配)
    python操作mysql数据库的常用方法使用详解
    mongodb数据库集群及sharding分片配置
    mongodb数据库安装及常见操作
    windows下搭建eclipse关于python的开发环境及初始化参数配置
    python环境下使用tab自动补全命令
    ubuntu系统初始化网络及mysql配置
  • 原文地址:https://www.cnblogs.com/george92/p/14864376.html
Copyright © 2011-2022 走看看