以下のソケットプログラミングに添付されたコードについて問題があり、多くの質問があります(すべての部分がから取得され、一緒に記述されています)マウスデータをクライアントに送信しようとしていますが、エラーが発生します:
Traceback (most recent call last):
File "srvr.py", line 29, in <module>
serv.sendall(status)
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
TypeError: must be string or buffer, not int
質問:1。文字列以外のソケットを介して、または具体的には.send( "...")ステートメントを使用せずにデータを送信するにはどうすればよいですか?2.データのストリームを送信する際に留意すべきことは何ですか?3.ここに書かれたコードはめちゃくちゃです、私にいくつかのコードセンスを教える助けを喜んでいただければ幸いです
ありがとうございました
コード:サーバー側:
from socket import * #import the socket library
##let's set up some constants
HOST = '' #we are the host
PORT = 29876 #arbitrary port not currently in use
ADDR = (HOST,PORT) #we need a tuple for the address
BUFSIZE = 4096 #reasonably sized buffer for data
## now we create a new socket object (serv)
## see the python docs for more information on the socket types/flags
serv = socket( AF_INET,SOCK_STREAM)
##bind our socket to the address
serv.bind((ADDR)) #the double parens are to create a tuple with one element
serv.listen(5)
print 'listening...'
conn,addr = serv.accept() #accept the connection
print '...connected!'
mouse = file('/dev/input/mouse0')
while True:
status, dx, dy = tuple(ord(c) for c in mouse.read(3))
def to_signed(n):
return n - ((0x80 & n) << 1)
dx = to_signed(dx)
dy = to_signed(dy)
conn.send(status)
conn.close()
クライアント:
##client.py
from socket import *
HOST = 'localhost'
PORT = 29876 #our port from before
ADDR = (HOST,PORT)
BUFSIZE = 4096
cli = socket( AF_INET,SOCK_STREAM)
cli.connect((ADDR))
data = cli.recv(BUFSIZE)
while data != '':
print data
cli.close()