zoukankan      html  css  js  c++  java
  • socket实现的简单的ftp服务(一)

    用 socket实现简单的ftp服务
    ex:服务端
     1 import socket,os
     2 server=socket.socket()
     3 server.bind(("localhost",6969))#绑定要监听端口
     4 server.listen()#监听
     5 print("等待操作命令")
     6 while True:#开始接电话
     7     conn, addr = server.accept()  # 等电话打进来
     8     # conn 就是客户端连接过来,服务端为其生成的一个连接实例
     9     print("命令来了",addr)
    10     while True:
    11         data=conn.recv(1024)#接收,接收的包大小最大是1024个字节(最大8192),改小这个值,将出现未接收完的数据,
    12         # 还在缓存区中,下次执行会先发送出来.(改大buff解决不了问题)。方案:先告诉客户端要发送多少数据,让客户端
    13         #校验,完全接收数据
    14         if not data:#判断是否有数据发送进来
    15             print("客户端已断开")
    16             break
    17         print("执行命令%s"%data)
    18         cmd_res=os.popen(data.decode()).read()
    19         if len(cmd_res)==0:
    20             cmd_res = "命令错误"   # 命令错误时给客户端发回信息内容
    21         conn.send(str(len(cmd_res.encode('utf-8'))).encode('utf-8'))#先发大小,第一个encode是因为
    22         # 中文字段占三个字节,需要先转换码,才是真正的长度,否则出现长度判断错误
    23         client_ack = conn.recv(1024)  # 客户端回馈,避免粘包
    24         conn.send(cmd_res.encode('utf-8'))#接收后,发送
    25 server.close()

    ex:客户端

     1 import socket
     2 client=socket.socket()#声明socket类型,同时生成连接对象
     3 client.connect(('localhost',6969))
     4 
     5 while True:
     6     cmd=input(">>:").strip()
     7     if len(cmd)==0:#当输入的消息是空时,不发送,等待输入非空后再发送
     8         continue
     9     client.send(cmd.encode("utf-8"))
    10     cmd_res_size=client.recv(1024)#接收服务端命令的长度
    11     client.send("客户端准备完毕,请发送新命令".encode('utf-8'))#相应服务端,避免粘包
    12     recevied_size=0#定义一个空字节,用于后续循环接收判断是否接收完,跳出循环
    13     recevied_data=b''
    14     while recevied_size<int(cmd_res_size.decode()):#循环收返回的数据
    15         data=client.recv(1024)
    16         recevied_size+=len(data)#每次收到的数据不是刚刚是1024字节,所有必须判断
    17         recevied_data+=data
    18     print(recevied_data.decode())
    19 client.close()


  • 相关阅读:
    @ModelAttribute 与@InitBinder
    springboot开启矩阵传参MatrixVariable
    socket(一)
    request请求《一》
    Ajax请求中的async:false/true的作用
    java.lang.NullPointerException at org.apache.jsp.index_jsp._jspInit(index_jsp.java:40)
    shiro登录源码
    js(正则验证)
    多进程之间的通信
    队列中常用方法的使用
  • 原文地址:https://www.cnblogs.com/pythonkids/p/7762671.html
Copyright © 2011-2022 走看看