私はpythonを知っており、より複雑なものに取り込もうとしています。私はこのコードを見つけましたが、おそらくうまくいきました。クライアントの 14 行目で、mrecv ValueError: invalidliteral for int() with base 10; の戻りエラーが発生しています。''
2 つのファイルを分離し、サーバー、次にクライアントを呼び出します。私がそれらを実行すると、サーバーはちょうど Closing と言い、クライアントは
recieved-> bye!!!と言います。何も起こりませんが、クライアントに hello と入力すると、上記のエラーが表示されます。私はおそらく/おそらく何か間違ったことをしています。ソケットやサーバーなどで何かをするのはこれが初めてです。私が間違っていることを知っている場合は、助けてください。また、他に良いウェブサイトやチュートリアルがあれば、よろしくお願いします。これがすべてのコードです(私のものではありません)
Python ソケット チャットの例、作者: Ankur Shrivastava、ライセンス: GPL v3
サーバ
import socket
import threading
import time
SIZE = 4
soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
soc.bind(('127.0.0.1',5432))
soc.listen(5)
class CThread(threading.Thread):
def __init__(self,c):
threading.Thread.__init__(self)
self.conn = c
self.stopIt=False
def mrecv(self):
data = self.conn.recv(SIZE)
self.conn.send('OK')
msg = self.conn.recv(int(data))
return msg
def run(self):
while not self.stopIt:
msg = self.mrecv()
print 'recieved-> ',msg
def setConn(con1,con2):
dict={}
state = con1.recv(9)
con2.recv(9)
if state =='WILL RECV':
dict['send'] = con1 # server will send data to reciever
dict['recv'] = con2
else:
dict['recv'] = con1 # server will recieve data from sender
dict['send'] = con2
return dict
def msend(conn,msg):
if len(msg)<=999 and len(msg)>0:
conn.send(str(len(msg)))
if conn.recv(2) == 'OK':
conn.send(msg)
else:
conn.send(str(999))
if conn.recv(2) == 'OK':
conn.send(msg[:999])
msend(conn,msg[1000:]) # calling recursive
(c1,a1) = soc.accept()
(c2,a2) = soc.accept()
dict = setConn(c1,c2)
thr = CThread(dict['recv'])
thr.start()
try:
while 1:
msend(dict['send'],raw_input())
except:
print 'closing'
thr.stopIt=True
msend(dict['send'],'bye!!!')# for stoping the thread
thr.conn.close()
soc.close()
クライアント
import socket
import threading
SIZE =4
class client(threading.Thread):
def __init__(self,c):
threading.Thread.__init__(self)
self.conn = c
self.stopIt = False
def mrecv(self):
data = self.conn.recv(SIZE)
self.conn.send('OK')
return self.conn.recv(int(data))
def run(self):
while not self.stopIt:
msg = self.mrecv()
print 'recieved-> ',msg
soc1 = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
soc1.connect(('127.0.0.1',5432))
soc1.send('WILL SEND') # telling server we will send data from here
soc2 = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
soc2.connect(('127.0.0.1',5432))
soc2.send('WILL RECV') # telling server we will recieve data from here
def msend(conn,msg):
if len(msg)<=999 and len(msg)>0:
conn.send(str(len(msg)))
if conn.recv(2) == 'OK':
conn.send(msg)
else:
conn.send(str(999))
if conn.recv(2) == 'OK':
conn.send(msg[:999])
msend(conn,msg[1000:]) # calling recursive
thr = client(soc2)
thr.start()
try:
while 1:
msend(soc1,raw_input())
except:
print 'closing'
thr.stopIt=True
msend(soc1,'bye!!') # for stoping the thread
thr.conn.close()
soc1.close()
soc2.close()
数字を入力しようとしましたが、同じエラーが表示されます。行から int を取り出してクライアントを実行すると、数値でなければならないと表示されます...他のアイデアはありますか?