zoukankan      html  css  js  c++  java
  • 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()







  • 相关阅读:
    UVA748 Exponentiation 解题报告
    uva465 解题报告
    UVA 10494 If We Were a Child Again 解题报告
    【今日所得】1.29。。。
    题型总结之高精度
    cf 163 div2 c题 YY 思路
    寒假计划
    Facebook Hacker Cup 2013 Qualification Round 解题报告
    戴戒指的含义(以后要结婚的必看)
    男人心疼女人的13种方式
  • 原文地址:https://www.cnblogs.com/bilx/p/11418710.html
Copyright © 2011-2022 走看看