python while break try 无法中断_解码不能正常工作并且while循环不能正确中断python...

这是一个使用Python中的TCP套接字的文件传输应用程序。文件传输协议将包含一个名为ftps.py文件一个客户打电话来ftpc.py文件. 在

文件传输应用程序将使用一个简单的协议。前4个字节(按网络字节顺序)将包含后续文件中的字节数。接下来的20个字节将包含文件的名称(假设名称可以容纳20个字节)。接下来的TCP流中的其余字节将包含文件中的数据。在

我在不同的计算机上运行客户机程序和服务器程序,但有两个错误:

1) 当我编码文件名并将其发送到套接字时,当服务器端接收并解码时,文件名是不正确的

2)服务器端似乎陷入了while循环,我不知道为什么

客户import socket

import sys

import os

filename=sys.argv[2]

print filename

if len(sys.argv) > 1 :

print('Trying to connect...')

s = socket.socket()

ip_add=(sys.argv[1])

print(ip_add)

s.connect((ip_add, 4000))

print('Connected. Wating for command.')

while True:

cmd = s.recv(24)

if cmd == 'getsize':

print('"getsize" command received.')

statinfo=os.stat(filename)

byte_size=statinfo.st_size

size_str=str(byte_size)

s.sendall(size_str)

if cmd == 'getfilename':

print('"getfilename" command received.')

formatted_name = filename.rjust(20)

fname = formatted_name.lstrip()

print(fname)

encoded_filename=fname.encode('utf-8')

s.sendall(encoded_filename)

if cmd == 'getfile':

print('"getfile" command received. Going to send file.')

file_input = open(sys.argv[2], 'rb')

while True:

buff = file_input.read(512)

if len(buff) == 0:

break

s.sendall(buff)

print('File transmission done.')

if cmd == 'end':

print('"end" command received. Teminate.')

break

file_input.close()

f.close()

服务器

^{pr2}$

以下是服务器程序的终端输出:% python ftps.py

Waiting for clinet to connect...

Connected. Going to receive file.

1797

Filename: 55

客户端输出:% python ftpc.py 164.107.113.20 2.jpg

2.jpg

Trying to connect...

164.107.113.20

Connected. Wating for command.

"getsize" command received.

"getfilename" command received.

2.jpg

"getfile" command received. Going to send file.

File transmission done.

文件名:55,应该是文件名:2.jpg

程序在这一点上陷入了一个循环。。有人知道为什么会这样吗?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值