-1

我需要编写一个服务器和一个客户端来做 4 件事 1.发送消息被接收的时间 2.获取文件夹中的所有文件 3.从该文件夹中复制一个文件并在另一个文件夹中创建一个新文件(txt) 4.关闭程序

克林特:

    import socket
    import os
    import pickle
    s=socket.socket()
    addr=('127.0.0.1',8200)
    s.connect(addr)
    choice="0"
    while choice!="4":
        print s.recv(4068)
        choice=raw_input("please choose a service number:")
        s.send(choice)
        if choice=="3":
            fileName=raw_input("please enter the name of the file you want to download:")
            s.send(fileName)
        data2= s.recv(4068)
        if choice=="1":
            print data2
        elif choice=="2":
            data_arr=pickle.loads(data2)
            print data_arr
        elif choice=="3":
            text=s.recv(4068)
            if text=="no file with this name":
                print text
            else:          
                newFile=open("newFile.txt","w")
                newFile.write(text)
                newFile.close()       

    print "thanks for using our conection"
    s.close()

服务器:

import socket
import time
import os
import pickle
def main():
    path="C:\hello"
    s=socket.socket()
    addr=('127.0.0.1',8200)
    s.bind(addr)
    s.listen(5)
    s2,addr2=s.accept()
    choice="0"
    while choice!="4":
        s2.send("1.Get the time of the message\r\n2.Get list of files\r\n3.Download file\r\n4.Close") 
        choice= s2.recv(4068)
        if choice=="1":
            s2.send(time.strftime("%H:%M:%S"))
        if choice=="2":
            dirs=os.listdir(path)
            data_string = pickle.dumps(dirs)
            s2.send(data_string)    
        if choice=="3":
              fileName=s2.recv(4068)
              os.chdir(path)
              dirs=os.listdir(path)
              for file in dirs:
                  if fileName in dirs:
                      f=open(fileName,'r')
                      text=f.read()
                      **s2.send(text)**
                      f.close()
                  else:
                      **s2.send("no file with this name")**
    s.close()
    s2.close()



if __name__ == '__main__':
    main()

问题是我在另一台电脑上试过了,程序只是没有发送消息(粗体),我不明白为什么,因为代码在另一台电脑上工作,经过几次测试,我知道它找到了文件,一切都是好的,它只是不发送消息(.txt 文件不为空)

4

1 回答 1

0

根据您的代码,您检查了是否fileName进入dirs。您实现了 if 和 else 条件。你没有检查的一件事是dirs它本身。

您提到代码可以在您的机器上运行,但不能在第二台机器上运行。我的猜测是dirs第二台机器是空的。因此代码忽略所有代码for fileName in dirs:

您可以添加调试行以检查 dirs 是否为空

于 2016-10-27T21:29:33.243 回答