2017-02-16 3 views
0

私はPythonプログラムを初めて使用しています。そして、私は2つの数字を追加するためのクライアント/サーバプログラムを書いた。クライアントは2つの数値を与え、サーバーは合計します。実行中に、クライアント側で上記のエラーが発生しています。文字列またはバッファではありませんint内のエラー

Client.py

!/usr/bin/python 

import socket 
import sys 

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
server_address = ('127.0.0.1', 58817) 
sock.connect(server_address) 

a=raw_input("Enter a number: ") 
b=raw_input("Enter a number: ") 

sock.sendall(a,b) 
data = sock.recv(1024) 

print data 

sock.close() 

Server.py

!/usr/bin/python 

import socket 
import sys 

def sum(a, b): 
    data=a + b 
    return data 

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
server_address = ('127.0.01', 58817) 
sock.bind(server_address) 
sock.listen(1) 
connection, client_address = sock.accept() 

print ("connection from", client_address) 

while True: 
data=connection.recv(1024) 
if not data: break 
print "server received : ", repr(data) 
sum(data) 

connection.sendall(data) 
connection.close() 

プログラムを実行している間、私はクライアント側で以下のエラーで打っていますがあり

Enter a number: 4 
Enter a number: 3 

Traceback (most recent call last): 



File "clientadd.py", line 15, in <module> 
    sock.sendall(a,b) 
    File "/usr/lib/python2.7/socket.py", line 224, in meth 
    return getattr(self._sock,name)(*args) 
TypeError: an integer is required 

cliといくつかの間違いですint側にint(a、b)を代入します。それをどのように変更して、サーバーによって読んだら何らかの順序で入れていますか?誰かが私にこれを助けることができますか?プログラムが良好であり、出力を得るための作業状態であるかどうかを確認することができますか?

ありがとうございます!

+0

sock.sendall(a、b)...これが問題です。ネットワーク経由でバイト以外のデータ型を送信することはできません。 –

+0

これを解決するには?言い換えればどんなヒント?私はサーバーに2つのデータを渡し、追加として1つ戻る必要があります。 sendall(a、b)を別の方法で渡す方法はどうでしょうか? – rob

答えて

0

あなたはサーバ側のserver_addressにタイプミスがあります。 ('127.0.0.1', 58817)である必要があります。接続しようとしているサーバーが存在しないため、クライアントはエラーを出します。

+0

こんにちは、server_address =( '127.0.0.1'、58817)に変更を加えました。しかし、まだ私は打撃エラーを見ることができます。 – rob

2

ソケットを使用してバイトを送受信できることに注意してください。だから、クライアントとソケットの両方がそれを反映する必要があります。代わりにsendallのクライアント側で

、(a、b)は、次のことができます。サーバー側で

b=bytes("{},{}".format(a,b),"ascii") 
sock.sendall(b) 

を、整数を取得するために文字列を解析。

data=connection.recv(1024) 
a,b = data.decode().split(',') 
a,b = int(a),int(b) 

合計をバイトとして返すことができるはずです。

+0

15行目の のc = bytes( "{}、{}"。書式(a、b))のファイルをトレースするときに、Traceback 、 "ascii") TypeError:str()は最大で1つの引数(2が与えられます) – rob

+0

は私とうまく動作します。しかし、問題を見つけることができません。おそらくpython2の問題私は気づいていない。おそらく。 –

関連する問題