zoukankan      html  css  js  c++  java
  • python scoket

    一、简介

    scoket(套结字)在python就是模块

    二、分类

    基于文件型(不用)

    基于网络型

    名字:AF_INET

      AF_INET6

    三、scoket应用

    1、基于tcp

    长连接:基于tcp的Server端只能和一台Client端进行数据传输

    特点

      必须先运行Server端,再运行Client端

      在Server端,第一次可以接收或发送信息  

    # server端,基于tcp协议
    import socket
    sk = socket.socket()
    sk.bind(('127.0.0.1', 8010))
    sk.listen()
    connect, addr = sk.accept()
    ret = connect.recv(1024).decode('utf-8')
    print(ret)
    connect.send(bytes('hello', encoding='utf-8'))
    connect.close()
    sk.close()
    # client端,基于tcp协议
    import socket
    sk = socket.socket()
    sk.connect(('127.0.0.1', 8010))
    sk.send(bytes('你好', encoding='utf-8'))
    ret = sk.recv(1024).decode('utf-8')
    print(ret)
    sk.close()
    # server端,基于tcp协议
    """
    优化,实现简单的对话功能
    """
    import socket
    sk = socket.socket()
    sk.bind(('127.0.0.1', 8010))
    sk.listen()
    connect, addr = sk.accept()
    while 1:
        ret = connect.recv(1024).decode('utf-8')
        print(ret)
        if ret == 'byte':
            break
        info = input('server>>>')
        connect.send(bytes(info, encoding='utf-8'))
    connect.close()
    sk.close()
    # client端,基于tcp协议
    """
    优化,实现简单的对话功能
    """
    import socket
    sk = socket.socket()
    sk.connect(('127.0.0.1', 8010))
    while 1:
        info = input('client>>>')
        sk.send(bytes(info, encoding='utf-8'))
        if info == 'byte':
            break
        ret = sk.recv(1024).decode('utf-8')
        print(ret)
    
    sk.close()

    注意:

    1)sk.accept()和sk.connect(),里面是tuple

    2)在bind前加

    sk.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

     3)网络传输用bytes类型

    4)客户端和服务器的send和recv是相互关联的

    2、基于udp协议

    基于udp协议,不需要监听和连接,发送和接收都有两个参数(信息,地址)

    特点:

      Server端和Client端运行的顺序没有先后

      在Server端,第一次只能接收信息

    """
    基于udp协议
    Server端
    聊天系统
    """
    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    sk.bind(('127.0.0.1', 8010))
    while 1:
        msg, addr = sk.recvfrom(1024)
        new_msg = msg.decode('utf-8')
        print(new_msg)
        # if new_msg == 'byte':
        #     break
        info = input('Server>>>')
        sk.sendto(info.encode('utf-8'), addr)
        if info == 'byte':
            break
    sk.close()
    """
    基于udp协议
    Client端
    """
    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    ip_port = ('127.0.0.1', 8010)
    while 1:
        info = input('Client1>>>')
        new_info = ('来自Client的消息:' + info).encode('utf-8')
        sk.sendto(new_info, ip_port)
        if info == 'byte':
            break
        msg, addr = sk.recvfrom(1024)
        new_msg = msg.decode('utf-8')
        print(new_msg)
        if new_msg == 'byte':
            break
    sk.close()
    """
    基于udp协议
    Client2端
    """
    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    ip_port = ('127.0.0.1', 8010)
    while 1:
        info = input('Clinet2>>>')
        new_info = ('来自Client2的消息:' + info).encode('utf-8')
        sk.sendto(new_info, ip_port)
        if info == 'byte':
            break
        msg, addr = sk.recvfrom(1024)
        new_msg = msg.decode('utf-8')
        print(new_msg)
        if new_msg == 'byte':
            break
    sk.close()

    注意:

      发送和接收数据,有两个参数(数据,地址)

      Server端不需要监听和连接,Client端不需要连接

      网络传输的数据类型是bytes,注意字符编码

      Server端第一次只能接收信息

  • 相关阅读:
    测试杯子
    如何测试网页的登录页面
    功能性测试之边界值测试
    自动化 sample
    软件架构---敏捷和架构的关系
    软件架构---分布式后端架构应该考虑的一些方面
    软件架构---集群与负载均衡
    软件架构---从需求明确架构设计驱动力
    软件架构---质量属性的实现
    软件架构---质量属性(二)
  • 原文地址:https://www.cnblogs.com/wt7018/p/10970605.html
Copyright © 2011-2022 走看看