本帖最后由 金路成 于 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
|
|