zoukankan      html  css  js  c++  java
  • python模块——socket

    实例一、

    server:
      #socket套接字(IP + 端口号)(qq,wechat 发送接收消息依靠socket模块),cs架构
    import socket
    server = socket.socket()
      #实例化出一个socket对象,默认tcp/ip协议
    server.bind(('127.0.0.1',8888))
      #绑定客户端,VIP,元组形式,('')相当于('0.0.0.0')
      #声明出client端该访问那个地址和端口号
    server.listen(5)
      #半连接池,listen(5)最大连接数
    print('wait telephone..........')
    conn,addr = server.accept()
      #监听是否有客户端来连接
      #运行会产生两个返回值:连接信息,客户端信息
    print('call telephone............')
    data = conn.recv(10240)
      #接收到的信息。10240:最大接受的字节,随便写'
    print(data.decode('utf-8'))

    client:
    importsocket
    client=socket.socket()
    client.connect(('127.0.0.1',8888))
    cmd=input('==>:')
    client.send(cmd.encode('utf-8')) 

    结果:

     

    实例2、

    利用subprocess模块和socket模块在其他主机执行cmd命令:
    server:
    import socket,subprocess
    server = socket.socket()
    server.bind(('127.0.0.1',8888))
    server.listen(5)
    print('wait telephone..........')
    conn,addr = server.accept()
    print('call telephone............')
    while True:
        cmd = conn.recv(10240)
        process = subprocess.Popen(cmd.decode('utf-8'),
                                   shell=True,
                                   stdout=subprocess.PIPE,
                                   stderr=subprocess.PIPE
                                   )
        stdout=process.stdout.read()
        stderr=process.stderr.read()
        result = stdout+stderr
        conn.send(result)
    
    client:
    import socket
    client = socket.socket()
    client.connect(('127.0.0.1',8888))
    while True:
        cmd = input('==>:').strip()
        if cmd:
            client.send(cmd.encode('utf-8'))
        else:
            continue
        result = client.recv(10240)
        print(result.decode('gbk'))
    

     结果: 

     

    实例3、

    简易聊天软件(首先利用socket建立两台机器的通信,再利用多线程让发送消息和接收消息同时运行。)

    server:
    import socket,threading
    server = socket.socket()
    server.bind(('127.0.0.1',8888))
    server.listen(5)
    print('wait telephone..........')
    conn,addr = server.accept()
    print('call telephone............')
    def recv():
        while True:
            data = conn.recv(1024)
            print(data.decode('utf-8'))
    def send():
        while True:
            cmd = input('==>:')
            conn.send(cmd.encode('utf-8'))
    t1 = threading.Thread(target=recv)
    t2 = threading.Thread(target=send)
    t1.start()
    t2.start()
    
    
    client:
    import socket,threading
    client = socket.socket()
    client.connect(('127.0.0.1',8888))
    def send():
        while True:
            cmd = input('==>:').strip()
            client.send(cmd.encode('utf-8'))
    def recv():
        while True:
            data = client.recv(1024)
            print(data.decode('gbk'))
    
    t1 = threading.Thread(target=recv)
    t2 = threading.Thread(target=send)
    t1.start()
    t2.start()
    

     结果:

     

     

    实例4、

    检查IP地址和端口号通不通:

    import socket
    hosts = ['192.168.254.12:80','192.168.254.12:3306','2.2.2.2:80','3.3.3.3:80']
    socket.setdefaulttimeout(1)
    
    for host in hosts:
        ip = host.split(':')[0]
        port = host.split(':')[1]
        server = socket.socket()
        res = server.connect_ex((ip,int(port)))
        # 如果res为0代表ok,不为0代表连接失败
        if res == 0:
            print('%s is ok' % ip)
        else:
            print('%s is 不ok' % ip)
    
    
    import socket
    socket.setdefaulttimeout(1)            #超时时间
    host_list = ['192.168.4.145:5555','192.168.4.146:555','192.168.4.147:5555','192.168.31.199:445']
    for info in host_list:
        server = socket.socket()
        ip = re.compile('(.*?):(.*)').search(info).group(1)
        port = re.compile('(.*?):(.*)').search(info).group(2)
        res = server.connect_ex((ip, int(port)))
        if res == 0:
            print('%s--%s端口正常' % (ip, port))
        else:
            print('%s--%s端口异常' % (ip, port))
  • 相关阅读:
    没想到吧?这货比 open 更适合读取文件
    卸载 PyCharm!这才是 Python 小白的最理想的 IDE
    git 会保留所有的提交吗?不会!
    C# 在构造函数内调用虚方法
    【转】第一个汇编器是怎么实现的
    SQL Server查询数据库所有表名与表说明
    Vue实现节流,防止重复提交
    mysql 查询json数组(一)
    VScode怎么在代码折叠后,插入新的内容
    Vue 通过调用百度API获取地理位置-经度纬度省份城市
  • 原文地址:https://www.cnblogs.com/twoo/p/11750558.html
Copyright © 2011-2022 走看看