こんにちは、stackoverflowコミュニティ 私は単純なソケットベースのPythonスクリプトを書いて〜20回実行しました。 18回はそれがやろうとしたことをしましたが、2回は無駄な手紙を印刷しました。同じpythonスクリプトですが、異なる結果
(これは、特定のディレクトリ内のすべてのフォルダ名を送信して印刷することになった)
サーバー:
import socket
import os
import base64
host = ''
port = 6934
s = socket.socket()
s.bind((host, port))
s.listen(5)
while True:
c, addr = s.accept()
req = c.recv(512)
print "%s has connected w REQ %s" %(str(addr), str(req))
amount = len(os.listdir("./software"))
c.send(str(amount))
print amount
for dir in os.listdir("./software"):
name = str(dir)
c.send()
with open("./software/"+dir+"/img.jpg", "rb") as image:
image.seek(0)
imageStr = image.read().encode("base64")
c.send(imageStr)
print "imageStr"
with open("./software/"+dir+"/text.txt", "r+") as desc:
desc.seek(0)
descStr = desc.read()
c.send(descStr)
print descStr
c.close()
s.close()
クライアント:
import socket
class Connection(object):
def __init__(self, name, desc):
self.name = name
self.desc = desc
objList = []
def fetcher(request):
host = "192.168.178.87"
port = 6934
s = socket.socket()
s.connect((host, port))
s.send(request)
amount = int(s.recv(128))
for i in range(0, amount):
name = s.recv(512)
content = s.recv(32768)
desc = s.recv(8192)
objList.append(Connection(name, desc))
def window():
for i in objList:
print i.name
print i.desc
print "Window loop"
def main(request):
fetcher(request)
window()
main("greetings")
コンソール出力(Iが変化しませんでしたコード内のもの) サーバー:
('192.168.178.87', 56752) has connected w REQ greetings
1
imageStr
Hallo
('192.168.178.87', 56754) has connected w REQ greetings
1
imageStr
Hallo
('192.168.178.87', 56756) has connected w REQ greetings
1
imageStr
Hallo
('192.168.178.87', 56757) has connected w REQ greetings
1
imageStr
Hallo
('192.168.178.87', 56758) has connected w REQ greetings
1
imageStr
Hallo
('192.168.178.87', 56759) has connected w REQ greetings
1
imageStr
Hallo
('192.168.178.87', 56761) has connected w REQ greetings
1
imageStr
Hallo
('192.168.178.87', 56762) has connected w REQ greetings
1
imageStr
Hallo
('192.168.178.87', 56763) has connected w REQ greetings
1
imageStr
Hallo
('192.168.178.87', 56764) has connected w REQ greetings
1
imageStr
Hallo
('192.168.178.87', 56765) has connected w REQ greetings
1
imageStr
Hallo
('192.168.178.87', 56766) has connected w REQ greetings
1
imageStr
Hallo
('192.168.178.87', 56767) has connected w REQ greetings
1
imageStr
Hallo
私は、Pythonの2.7、両方のスクリプトをWindows 7のProfessionalの64ビット版を使用しています(私はここにいる理由...)
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
oneQk12AQAAAAAAADYAAAAoAAAACgAAAAoAAAABABgAAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAAJBzt
JBztJBztJBztJBztJBztJBztJBztJBztJBztAAAkHO0kHO0kHO0kHO0kHO0kHO0kHO0kHO0kHO0k
HO0AACQc7SQc7SQc7SQc7SQc7SQc7SQc7SQc7SQc7SQc7QAAJBztJBztJBztJBztJBztJBztJBzt
JBztJBztJBztAAAkHO0kHO0kHO0kHO0kHO0kHO0kHO0kHO0kHO0kHO0AACQc7SQc7SQc7SQc7SQc
7SQc7SQc7SQc7SQc7SQc7QAAJBztJBztJBztJBztJBztJBztJBztJBztJBztJBztAAAkHO0kHO0k
HO0kHO0kHO0kHO0kHO0kHO0kHO0kHO0AACQc7SQc7SQc7SQc7SQc7SQc7SQc7SQc7SQc7SQc7QAA
JBztJBztJBztJBztJBztJBztJBztJBztJBztJBztAAA=
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
oneQk12AQAAAAAAADYAAAAoAAAACgAAAAoAAAABABgAAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAAJBzt
JBztJBztJBztJBztJBztJBztJBztJBztJBztAAAkHO0kHO0kHO0kHO0kHO0kHO0kHO0kHO0kHO0k
HO0AACQc7SQc7SQc7SQc7SQc7SQc7SQc7SQc7SQc7SQc7QAAJBztJBztJBztJBztJBztJBztJBzt
JBztJBztJBztAAAkHO0kHO0kHO0kHO0kHO0kHO0kHO0kHO0kHO0kHO0AACQc7SQc7SQc7SQc7SQc
7SQc7SQc7SQc7SQc7SQc7QAAJBztJBztJBztJBztJBztJBztJBztJBztJBztJBztAAAkHO0kHO0k
HO0kHO0kHO0kHO0kHO0kHO0kHO0kHO0AACQc7SQc7SQc7SQc7SQc7SQc7SQc7SQc7SQc7SQc7QAA
JBztJBztJBztJBztJBztJBztJBztJBztJBztJBztAAA=
Window loop
C:\Users\LeEmpollon\Desktop\Cream>python cream.py
one
Hallo
Window loop
:
。コンソール出力(Iは、コードには何も変更していない) クライアントに同じコンピュータ上で実行され、スクリプトとフォルダが同じディレクトリにあるされた:読書のための
folder
-software
--one
---img.jpg (10x10px)
---text.txt(contains the word "Hello")
--creamserver.py
--cream.py
感謝:)
ここで、あなたのマジックナンバーは 'name = s.recv(512)content = s.recv(32768)desc = s.recv(8192)'から取得していますか? – corn3lius
別々の 'send'呼び出しでたくさんのデータを送信し、別々の' recv'呼び出しで個別に読み取ろうとしているようですが、それはうまくいきません。 'recv'の前に2回の' send'が起こった場合、次の 'recv'は両方からデータを取得します。 [socket programming howto](https://docs.python.org/2/howto/sockets.html#using-a-socket)を参照してください。これが、人々が通常、ソケットで直接作業するのではなく、何らかのネットワークプロトコルを使用する理由の1つです。それは、お尻の痛みです。 – BrenBarn
@ corn3lius私はちょうど私がそれらを使用しようとしているもののために十分大きなように見えたいくつかの数字を使用しました。 –