簡體   English   中英

用於在python中傳輸照片的套接字編程

[英]socket programming for transferring a photo in python

我是python套接字編程的新手。 這是在Mininet主機中打開TCP套接字並將照片從一台主機發送到另一台主機的示例。 實際上,為了滿足我的要求,我已經更改了用於向另一台主機發送簡單消息( 將接收到的數據寫入文本文件 )的代碼。 但是,當我運行此代碼時,在發送方遇到此錯誤:

144
Traceback (most recent call last):
  File mmyClient2,pym, line 13, in <module> 
    if(s.sendall(data)):
  File m/usr/lib/python2.7/socket.pym, line 228, in meth
    return yetattr[self,_sockename](*args) 
  File m/usr/lib/python2.7/socket.pym, line 174, in _dummy 
    raise error(EBADF, 'Bad file descriptor') 
socket,error: [Errno 9] Bad file descriptor  

那怎么了

Receiver.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()

Sender.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])
s.close()

s.sendall()似乎有問題,因為當我將其更改為s.send()時,沒有錯誤,並且照片傳輸成功。 所以我的問題是:盡管在此站點上的上一個問題中建議我使用s.sendall()而不是s.send(),但不這樣做是錯誤的嗎?

發送完所有數據后,您關閉了套接字,然后再次使用關閉的套接字,這會導致錯誤。您可以像這樣編寫發送方。

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 1:
    if not data:
        break
    s.sendall(data)
    data = f.read(buf)
s.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM