首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python服务器-客户端网络关系问题

Python服务器-客户端网络关系问题
EN

Stack Overflow用户
提问于 2012-03-23 23:26:26
回答 1查看 367关注 0票数 1

我为我的网络类编写了一个程序,通过通过套接字发送文件并计时传输来测量上传和下载速度,并且我使用了Python。我遇到的问题是,服务器和客户端在同一台机器上运行时可以很好地通信,但一旦我将服务器程序放到网络上的另一台机器上,就不会发生文件传输。它们相互通信(客户端说“已连接到服务器”,服务器说“来自xxx.xxx的连接”),但文件传输大小和速度显示为0和0。

以下是服务器代码:

代码语言:javascript
复制
import util
import socket
import os
import shutil
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = ""
port = 12345
f = open("receivedfromclient.txt", "r+")
print "Waiting for clients..."
s.bind((host, port))
s.listen(5)
c, addr = s.accept()
print "Client connected:", addr
start = time.clock()
msg = c.recv(257024)
stop = time.clock()
duration = stop-start
f.write(str(msg))
b = os.path.getsize("receivedfromclient.txt")
print "File size = ", b, "bits"
print "Time to transfer from client  = ", duration, " seconds"
bw = (b/duration)/1048576
print "The upload bit rate is ", bw, "Mpbs"
f.close()
shutil.copy("receivedfromclient.txt", "sendtoclient.txt")
f.open("sendtoclient.txt")
c.send(f.read())
f.close()
c.close()
s.close()

客户端代码类似于:

代码语言:javascript
复制
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = raw_input("Please enter host address: ")#socket.gethostname()
port = 12345
sendfile = raw_input("Please enter name of file to transfer: ")
f = open(sendfile,"rb")
g = open("receivedfromserver.txt","w")
print "Connecting to ", host, port
s.connect((host, port))
s.send(f.read())

诸若此类。有人能告诉我我哪里做错了吗?

EN

回答 1

Stack Overflow用户

发布于 2012-03-24 00:42:57

嗯-至少有一些问题:

主要的一点是,我不清楚你真正想做的是什么。

以下是您的代码和一些备注:

代码语言:javascript
复制
# import util <-- NOT NEEDED
import socket
import os
import shutil
import time # <-- Added
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = ""
port = 12345
f = open("receivedfromclient.txt", "r+")
print "Waiting for clients..."
s.bind((host, port))
s.listen(5)
c, addr = s.accept() # <-- FORGOTTEN ()
print "Client connected:", addr
start = time.clock()
msg = c.recv(257024) # <-- You need some loop here to get the whole file
stop = time.clock()
duration = stop-start
f.write(str(msg))
b = os.path.getsize("receivedfromclient.txt") # <-- = instead of .
print "File size = ", b, "bits"
print "Time to transfer from client  = ", duration, " seconds"
bw = (b/duration)/1048576
print "The upload bit rate is ", bw, "Mpbs"
f.close()
shutil.copy("receivedfromclient.txt", "sendtoclient.txt")
f.open("sendtoclient.txt")
c.send(f.read())
f.close()
c.close()
s.close()

这里的一个问题是,start在大多数情况下都等于stop -所以在(b/duration)中你会得到一个除以零的错误。

在客户端部分,至少缺少一个import socket;根本不需要g

请进一步解释一下,你想做什么。

如果你想传输文件,有很多方法(sftp,rsync,nc,...)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9841928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档