这是一个使用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

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

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

  1. 全局中断_实时性迷思(3)——80%时间屏蔽了中断,实时性还有救么?

    [写在前面的话] 在本系列的第一篇文章<实时性迷思(1)--快是优点么?>中,我们介绍了实时性的基本模型: 并得出两个重要的结论: 实时性只关注"是否能在实时性窗口内完成对应事件 ...

  2. python编写请求参数带文件_转载:如何编写一个带命令行参数的Python文件

    看到别人执行一个支持命令行参数的python文件,瞬间觉得高大上起来.牛逼起来,那么如何编写一个带命令行参数的python脚本呢?不用紧张,下面将简单易懂地让你学会如何让自己的python脚本,支持命 ...

  3. python作业不会做怎么办_不学点编程,将来怎么给孩子辅导作业——Python新手入门教程...

    为了填满AI时代的人才缺口,编程语言教育都从娃娃抓起了!如果你还不懂Python是什么将来怎么给孩子辅导作业呢? Python新手入门教程 近期,浙江省信息技术课程改革方案出台,Python言语现已断 ...

  4. hal库开启中断关中断_(2)STM32使用HAL库操作外部中断——理论讲解

    1.中断触发过程 对主程序压栈--把中断服务函数的地址写入到程序计数器(PC)--执行中断服务函数 2.中断向量表 中断服务函数的地址在STM32的手册上的中断向量表中(如下是一部分): 如上表所示, ...

  5. python爬取网易云音乐_爬取网易云音乐评论(一)——用python执行JS脚本

    抓包分析 可以发现网页是post请求,表单数据有两个参数params和encSecKey,应该是经过js加密所得 因此在 Initiator 栏里找到对应的js,也就是core...js,点击打开查看 ...

  6. python实现目标检测源代码包_深度学习目标检测系列:faster RCNN实现|附python源码...

    摘要: 本文在讲述RCNN系列算法基本原理基础上,使用keras实现faster RCNN算法,在细胞检测任务上表现优异,可动手操作一下. 目标检测一直是计算机视觉中比较热门的研究领域,有一些常用且成 ...

  7. python代码雨在桌面实现_今天七夕节,外面下着大雨,用Python的tkinter做一个下爱心雨的特效,发给妹子...

    正文 今天七夕,还下着雨,刚好想做一个下着爱心雨的特效 准备图片素材 1.美图秀秀找一个爱心图,大小就50*50就可以,生成的是一个png格式文件 2.由于canvas.create_image只支持 ...

  8. stm32cubeide外部中断_【STM32】HAL库 STM32CubeMX教程三----外部中断(HAL库GPIO讲解)

    前言 上一节我们讲解了STM32CubeMX的基本使用和工程的配置,那么这一节我们正式来学习CubeMX配置STM32的各个外设功能了 今天我们会详细的带你学习STM32CubeMX配置外部中断,并且 ...

  9. python输入多个坐标点_判断多个坐标是否在同一条直线上|Python练习系列[13]

    练习内容:判断多个坐标是否在同一条直线上 完整代码和注释如下 print('请输入几个点的横纵坐标,程序将会返回这几个点是否在同一条直线上') def coor_nums():#获得每个值的横纵坐标 ...

最新文章

  1. 为什么工厂模式可以解耦?(二)
  2. linux下makefile
  3. Android 编译系统分析(二)
  4. jdk8 参数为方法_JDK 8中的几乎命名的方法参数
  5. 导入自己写的类,却被标红,原因及解决方法是?(Pycharm编辑器为例)
  6. 用PHPMailer在本地win环境,可以接收到邮件和附件,但在linux环境只能接收邮件信息接不到附件,是我的路...
  7. lan8720a自协商启动_惠及18个小区17851户!今年海曙老旧小区改造启动,重点内容包括…...
  8. java如何获取hostid_将Unix hostid转换为Java
  9. 风变编程的python8.9元_如何看待风变编程的 Python 网课?
  10. 商家冷启难题,快手每天8亿流量能解决吗?
  11. java代码实现打气球游戏_javascript+css3开发打气球小游戏完整代码
  12. 如何删除hao123?
  13. 计算机分子模拟的意义包括,计算机分子模拟
  14. broker指定ip
  15. 网络视频直播系统的发展历程
  16. 在成为Android工程师的一年里,我经历了什么?
  17. 探索数字化节能降碳 广域铭岛助力电解铝行业碳达峰
  18. es查询索引java_elasticsearch查询篇索引映射文档数据准备
  19. mfc模拟自动登录QQ[查找单机版连连看的剩余方块]
  20. 实现高效率、精准化的管理方式​-​兼职APP开发

热门文章

  1. Edmonds_Karp 算法 (转)
  2. JAVA客户端数据传输_java模拟TCP通信实现客户端上传文件到服务器端
  3. windows调用python_如何在Windows操作系统中从R调用Python?
  4. android 广告弹出层,安卓广告活动弹窗控件 android-adDialog
  5. oracle 9i 手工建库,简单记录Oracle 9i数据库手工建库过程
  6. springboot编写自定义过滤器
  7. mysql timestamp 并发_MySQL 实现 EF Code First TimeStamp/RowVersion 并发控制
  8. 华软计算机网络技术,[计算机硬件及网络]计算机网络技术专业自评报告华软.doc...
  9. 【Java从入门到天黑|03】JavaSE入门之流程控制
  10. php分页上一页下一页判断,分页(上一页,下一页)