我正在尝试实现一个程序,它将使UDP服务器发送客户端请求的文件,并在文件被发送到特定目录后对其进行日志记录。在
有谁能用Python代码指导我发送文件并记录日志吗? 另外,我们还需要在最后发送10 KB和$的数据块,以宣布数据已完成。如果我尝试运行服务器端代码:以下是我得到的错误:
感谢任何帮助。提前谢谢。在
服务器端:
import socket
import threading
import os
def RetrFile(name, sock):
filename = sock.recv(1024)
if os.path.isfile(filename):
sock.send("EXISTS " + str(os.path.getsize(filename)))
userResponse = sock.recv(1024)
if userResponse[:2] == 'OK':
with open(filename, 'rb') as f:
bytesToSend = f.read(1024)
sock.send(bytesToSend)
while bytesToSend != "":
bytesToSend = f.read(1024)
sock.send(bytesToSend)
else:
sock.send("ERR ")
sock.close()
def Main():
host = '192.168.0.24'
port = 9090
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host,port))
s.listen(5)
print("Server Started.")
while True:
c, addr = s.accept()
print("client connedted ip:<" + str(addr) + ">")
t = threading.Thread(target=RetrFile, args=("RetrThread", c))
t.start()
s.close()
if __name__ == '__main__':
Main()
客户端:
^{pr2}$
虽然您希望使用UDP,但使用的调用更符合基于TCP的通信。如果您只需在客户机和服务器中更改以下行,即使在TCP上也可以正常工作
发件人:
到
^{pr2}$在服务器和客户端。在
对于基于UDP的通信,只需要bind和recv。在TCP的情况下,调用accept是为了接受服务器端的连接。类似地,在客户端也不需要连接调用,如果要设置源端口后跟sendto,请绑定。对服务器端来说是这样的
在服务器.py在
另外请注意,服务器需要知道发送给客户端的内容,所以在线程中,如果您希望并发服务器,则需要维护每个客户端地址的状态。另一种选择是使用TFTP风格的方法,作为响应的一部分,您可以发送一个不同的端口号来联系基于UDP的服务器,这样主端口就可以返回接收更多的请求。此外,所有send调用都必须转换为sendto调用,其中必须指定客户端地址。在
同样,在客户端,您将需要以下内容(我在下面评论了TCP样式部分)
稍加修改,我就可以在我的系统上传输你的文件了。在
相关问题 更多 >
编程相关推荐