• python学习——网络编程


    网络编程:
    a.软件
    客户端:CS架构 client-->server
    浏览器:BS架构 brower-->server
    b.如何实现相互通信
    需求1:编写两个软件,软件之间相互通信。
    需求2:两个人直接连接(网线)
    需求3:教室相互通信(交换机)
    总结:
    1.相互通信本质发送010101010101
    2.交换机作用
    3.通过ipconfig查看自己的内网IP
    4.公网IP,掏钱。
    连接实例:

    服务端:
    import socket #帮助完成网络通信的模块
    # 创建服务端socket对象
    server = socket.socket()
    
    # 绑定IP和端口
    server.bind(('192.168.13.155',8000))
    
    # 后边可以等5个人
    server.listen(5)
    
    # 等待客户端来连接,如果没人来就傻傻的等待。
    # conn是客户端和服务端连接的对象(伞),服务端以后要通过该对象进行收发数据。
    # addr是客户端的地址信息。
    conn,addr = server.accept() # ##############################阻塞
    
    # 通过对象去获取(xxx通过伞给我发送的消息
    # 1024表示:服务端通过(伞)获取数据时,一次性最多拿1024字节。
    data = conn.recv(1024)
    print(data)
    
    # 服务端通过连接对象(伞)给客户端回复了一个消息。
    conn.send(b'stop')
    
    # 与客户端断开连接(放开伞)
    conn.close()
    
    # 关闭服务端的服务
    server.close()
    客户端:
    import socket
    
    client = socket.socket()
    
    # xxx相服务端发起连接请求
    # 阻塞,去连接,直接连接成功后才会继续向下走
    client.connect(('192.168.13.155',8000))
    
    # 连接上服务端后,相服务端发送消息
    client.send(b'hello')
    
    # 王晓东等待服务端给他发送消息
    data = client.recv(1024)
    print(data)
    
    # 关闭自己
    client.close()

    文件传输实例:

    客户端

    import socket
    import os
    import json
    
    #连接服务端
    sock = socket.socket()
    sock.connect(('127.0.0.1',8800))
    
    while 1:
        #输入指令
        cmd = input('输入命令>>') # put 111.jpg
        action,filename = cmd.strip().split(' ')
    
        #获取文件大小
        filesize = os.path.getsize(filename)
    
        #编译文件信息字典
        file_info = {'action':action,
                     'filename':filename,
                     'filesize':filesize,
                     }
    
        #将文件信息序列化并传输给服务端
        file_info_json = json.dumps(file_info).encode('utf8')
        sock.send(file_info_json)
    
        # 确认服务端接受到了文件信息
        code = sock.recv(1024).decode('utf8')
        if code == '200':
    
            # 发送文件数据
            with open(filename,'rb') as f:
                for line in f:
                    sock.send(line)
        else:
            print('服务器异常')

    服务端

    import socket
    import json
    
    #建立服务端连接
    sock = socket.socket()
    sock.bind(('127.0.0.1',8800))
    sock.listen(5)
    
    while 1:
        #客户端连接成功打印信息
        print('server is working...')
        conn,addr = sock.accept()
        while 1:
            #接受客户端发送的文件信息
            data = conn.recv(1024).decode('utf8')
            file_info = json.loads(data)
            print('file_info',file_info)
    
        # 获得文件信息,并获取字典内对应值
        action = file_info.get('action')
        filename = file_info.get('filename')
        filesize = file_info.get('filesize')
    
        conn.send(b'200')
    
        # 接收文件数据
        with open('put/'+filename,'wb') as f:
            recv_data_length = 0
            while recv_data_length < filesize:
                data = conn.recv(1024)
                recv_data_length += len(data)
                f.write(data)
                print('文件总大小:%s,已成功接收%s'%(filesize,recv_data_length))
        print('接收成功')

     sockerserver模块

    #客户端
    import socket
    
    sk = socket.socket()
    
    sk.connect(('127.0.0.1',8899))
    
    while 1:
        name = input(">>>>:")
        sk.send(name.encode('utf-8')) # 字节
    
        response = sk.recv(1024) # 字节
        print(response.decode('utf-8'))
    服务端
    import socketserver
    
    class Myserver(socketserver.BaseRequestHandler):
        def handle(self):
            # 字节类型
            while 1:
                # 针对window系统
                try:
                    print("等待信息")
                    data = self.request.recv(1024)  # 阻塞
                    # 针对linux
                    if len(data) == 0:
                        break
                    if data == b'exit':
                        break
                    response = data + b'SB'
                    self.request.send(response)
                except Exception as e:
                    break
    
            self.request.close()
    
    # 1 创建socket对象 2 self.socket.bind()  3 self.socket.listen(5)
    server=socketserver.ForkingUDPServer(("127.0.0.1",8899),Myserver)
    
    server.serve_forever()







  • 相关阅读:
    Android获取SIM卡信息--TelephonyManager
    android2.2应用开发之IccCard(sim卡或USIM卡)
    简易计算器
    c++ 按行读取txt文本
    poj 2010 Moo University
    字符串的最长公共子序列问题
    常用工具之zabbix
    常用工具之stunnel
    oracle 查看表属主和表空间sql
    linux shell执行方式
  • 原文地址:https://www.cnblogs.com/bilx/p/11418710.html
Copyright © 2020-2023  润新知