• socket


     参考:http://www.cnblogs.com/wupeiqi/articles/5040823.html

    socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)

    参数一:地址簇
    
      socket.AF_INET IPv4(默认)
      socket.AF_INET6 IPv6
    
      socket.AF_UNIX 只能够用于单一的Unix系统进程间通信
    
    参数二:类型
    
      socket.SOCK_STREAM  流式socket , for TCP (默认)
      socket.SOCK_DGRAM   数据报式socket , for UDP
    
      socket.SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。
      socket.SOCK_RDM 是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。
      socket.SOCK_SEQPACKET 可靠的连续数据包服务
    
    参数三:协议
    
      0  (默认)与特定的地址家族相关的协议,如果是 0 ,则系统就会根据地址格式和套接类别,自动选择一个合适的协议
    '''
    服务器端
    '''
    
    import socket
    # 声明socket类型,同时生成socket连接对象
    server = socket.socket()
    # 绑定要监听的端口,bind传递的是一个元祖
    server.bind(("localhost",6969))
    # 监听6969端口
    server.listen()
    
    print("接入前")
    # 等待接入
    # conn:连接的对象标记位,连接的对方的实例(就是客户端连接过来而在服务器端为其生存的一个连接实例)
    # addr:对方的地址
    conn, addr = server.accept()
    print("coon:",conn )
    print("addr:",addr)
    
    print("接入后")
    
    data = conn.recv(1024)
    print(data)
    # 返回一个值给客户端,这里是将data转换为大写字母返回
    conn.send(data.upper())
    server.close()
    server
    '''
    客户端
    '''
    import socket
    
    # 声明socket类型,同时生成socket连接对象
    client =socket.socket()
    # 连接本地,端口为6969,注意,connect里面是一个元祖
    client.connect(("localhost",6969))
    
    # 发送数据,3.0以上都是bytes数据
    client.send(b"hello word!")
    # 收取服务器端返回的数据,1024是1KB,就是1024字节
    data = client.recv(1024)
    
    print(data)
    # 关闭连接
    client.close()
    client

     单线程一直连接的socket

    '''
    客户端
    建立连接对象
    连接
    发送信息到服务器确认
    接收服务器返回的数据
    '''
    import socket
    
    # 声明socket类型,同时生成socket连接对象
    client =socket.socket()
    # 连接本地,端口为6969,注意,connect里面是一个元祖
    client.connect(("localhost",6969))
    
    # 发送数据,3.0以上都是bytes数据
    # client.send(b"hello word!")
    exit_flag = False
    while not exit_flag:
        msg = input(">>>>").strip()
        # 不能发送空字节过去服务器端
        if len(msg) == 0:
            continue
        elif msg == "q":
            break
        client.send(msg.encode("utf-8"))
        # 收取服务器端返回的数据,1024是1KB,就是1024字节
        data = client.recv(1024)
    
        print(data.decode())
    # 关闭连接
    client.close()
    client
    '''
    服务器端
    生成连接对象
    绑定要监听的端口
    监听端口
    等待客户端接入
    接收客户端发送的数据
    返回一个值给客户端
    '''
    
    import socket
    import os
    path = os.path.dirname(os.path.abspath(__file__))
    print(path)
    # 声明socket类型,同时生成socket连接对象
    server = socket.socket()
    # 绑定要监听的端口,bind传递的是一个元祖
    server.bind(("localhost",6969))
    # 监听6969端口
    server.listen(5)
    while True:
        print("接入前")
        # 等待接入
        # conn:连接的对象标记位,连接的对方的实例(就是客户端连接过来而在服务器端为其生存的一个连接实例)
        # addr:对方的地址
        conn, addr = server.accept()
        print("coon:",conn )
        print("addr:",addr)
    
        print("接入后")
        while True:
            data = conn.recv(1024)
            # 因为发送过来的要是byte字节,所以这边需要decode一下恢复
            print(data.decode())
            print(data)
            # 如果没有数据,断开客户端连接
            if not data:
                print("客户端已经断开")
                break
            # 返回一个值给客户端,这里是将data转换为大写字母返回
            conn.send(data.upper())
    server.close()
    server
  • 相关阅读:
    [转] Vue + Webpack 组件式开发(练习环境)
    [转] 从零构建 vue2 + vue-router + vuex 开发环境到入门,实现基本的登录退出功能
    [转] Redux入门教程(快速上手)
    [转] 前端数据驱动的价值
    [转] React风格的企业前端技术
    [转] 对Array.prototype.slice.call()方法的理解
    [转] webpack之plugin内部运行机制
    [转] 静态资源的分布对网站加载速度的影响/浏览器对同一域名下并发加载资源数量
    Mysql 版本号、存储引擎、索引查询
    linux 查看CPU、内存、磁盘信息命令
  • 原文地址:https://www.cnblogs.com/cheng662540/p/8324019.html
Copyright © 2020-2023  润新知