我对python中的套接字编程是个新手。下面是在Mininet主机中打开TCP套接字并将照片从一台主机发送到另一台主机的示例。实际上,我更改了用于向另一个主机(writing the received data to a text file)发送简单消息的代码,以满足我的需求。虽然当我实现这个修改后的代码时,没有错误,而且它似乎可以正确地传输,但我不确定这是否是完成这种传输的正确方式。由于我在同一台机器上运行两台主机,我认为这可能会对结果产生影响。我想请您检查一下这是否是正确的传输方式,或者我是否应该添加或删除某些内容。
mininetSocketTest.py #!/usr/bin/python
from mininet.topo import Topo, SingleSwitchTopo
from mininet.net import Mininet
from mininet.log import lg, info
from mininet.cli import CLI
def main():
lg.setLogLevel('info')
net = Mininet(SingleSwitchTopo(k=2))
net.start()
h1 = net.get('h1')
p1 = h1.popen('python myClient2.py')
h2 = net.get('h2')
h2.cmd('python myServer2.py')
CLI( net )
#p1.terminate()
net.stop()
if __name__ == '__main__':
main()
myServer2.py
import socket
import sys
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('10.0.0.1', 12345))
buf = 1024
f = open("2.jpg",'wb')
s.listen(1)
conn , addr = s.accept()
while 1:
data = conn.recv(buf)
print(data[:10])
#print "PACKAGE RECEIVED..."
f.write(data)
if not data: break
#conn.send(data)
conn.close()
s.close()
myClient2.py:
import socket
import sys
f=open ("1.jpg", "rb")
print sys.getsizeof(f)
buf = 1024
data = f.read(buf)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('10.0.0.1',12345))
while (data):
if(s.sendall(data)):
#print "sending ..."
data = f.read(buf)
print(f.tell(), data[:10])
else:
s.close()
s.close()
发布于 2018-07-11 06:15:31
首先,您应该使用TCP而不是UDP。TCP将确保您的客户端/服务器正确地接收到整个照片。UDP更多地用于内容流。绝对不是你的用例。
https://stackoverflow.com/questions/51274595
复制相似问题