A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 金路成 中级黑马   /  2018-8-14 22:13  /  1428 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 金路成 于 2018-8-14 22:19 编辑

老师的tcp服务器代码
from socket import *def get_file_content(file_name):   
    """获取文件的内容"""
    try:
        with open(file_name, "rb") as f:
           content = f.read()
        return content
    except:
        print("没有下载的文件:%s" % file_name)
    # 创建socket
    tcp_server_socket = socket(AF_INET, SOCK_STREAM)
    # 本地信息
    address = ('', port)
    # 绑定本地信息
    tcp_server_socket.bind(address)
    # 将主动套接字变为被动套接字
    tcp_server_socket.listen(128)
    while True:
        # 等待客户端的链接,即为这个客户端发送文件
        client_socket, clientAddr = tcp_server_socket.accept()
        # 接收对方发送过来的数据
        recv_data = client_socket.recv(1024)  # 接收1024个字节
        file_name = recv_data.decode("utf-8")
        print("对方请求下载的文件名为:%s" % file_name)
        file_content = get_file_content(file_name)
        # 发送文件的数据给客户端
        # 因为获取打开文件时是以rb方式打开,所以file_content中的数据已经是二进制的格式,因此不需要encode编码
       if file_content:
            client_socket.send(file_content)
        # 关闭这个套接字
        client_socket.close()
    # 关闭监听套接字
    tcp_server_socket.close()
if __name__ == "__main__":
    main()




下面的low代码,我的。


import socketdef main():
    # 创建套接字
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 绑定
    local_addr = ("", 7890)
    tcp_socket.bind(local_addr)
    # listen改为被动
    tcp_socket.listen(128)
    while True:
        # accept创建新套接字
        cilent_socket, cilent_addr = tcp_socket.accept()
        # 接收信息
        file_name = cilent_socket.recv(1024).decode('utf-8')
        print("请求下载的文件是%s" % file_name)
        # 是否符合条件
        try:
            with open(file_name, 'rb') as f:
                global file_data
                file_data = f.read()
        except:
            file_data = "".encode('utf-8')
            print("没有找到目标文件")
        # 读取内容并发送
        cilent_socket.send(file_data)
        cilent_socket.close()
if __name__ == '__main__':
    main()


自己写的,修改的时候出现过很多毛病,本来在except 后面没有定义file_data , 导致没有目标文件的时候会报错
还有就是except后面定义的file_data 貌似不能为None,我一用None,也会报错,而且即使编码也不行。不知道大神们能否指点迷津。
没有global 之前,老是爆下面这个错误,百度了一下,说是遇到这样的问题,说明你在声明变量file_data之前就已经对其进行了调用,
定位到错误的地方,对变量进行重新的声明。错误:local variable 'file_data' referenced before assignment

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马