大家好我一个月前开始学习python,请原谅我任何愚蠢的错误。我最近制作了这个聊天服务器并且它可以找到,但是客户收到的消息,或者具有嗨,那里的形式,它们看起来像这样 b'嗨,那里\ r \ n \ n' ,就像二进制消息一样,也是因为\ n和\ r \ n不生效。我在这里发布我的代码,所以如果有人能帮助我,那就太棒了,谢谢。 如果有人想测试它,客户端通过telnet连接
import socket
import select
class ChatServer:
def __init__( self, port ):
self.port = port;
self.srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
self.srvsock.setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR, 1 )
self.srvsock.bind( ("", port) )
self.srvsock.listen( 5 )
self.descriptors = [self.srvsock]
print ('ChatServer started on port %s' % port)
def run( self ):
while 1:
# Await an event on a readable socket descriptor
(sread, swrite, sexc) = select.select( self.descriptors, [], [] )
# Iterate through the tagged read descriptors
for sock in sread:
# Received a connect to the server (listening) socket
if sock == self.srvsock:
self.accept_new_connection()
else:
# Received something on a client socket
str = sock.recv(100)
# Check to see if the peer socket closed
if str == b'exit\r\n':
host,port = sock.getpeername()
str = 'Client left %s:%s\r\n' % (host, port)
self.broadcast_string( str, sock )
sock.close
self.descriptors.remove(sock)
else:
host,port = sock.getpeername()
newstr = '[%s:%s] %s' % (host, port, str)
self.broadcast_string( newstr, sock )
def broadcast_string( self, str, omit_sock ):
sms=bytes(str,'utf-8')
for sock in self.descriptors:
if sock != self.srvsock and sock != omit_sock:
sock.send(sms)
print (str)
def accept_new_connection( self ):
newsock, (remhost, remport) = self.srvsock.accept()
self.descriptors.append( newsock )
newsock.send(b"You're connected to the Python chatserver, enter 'exit' to get out\r\n")
str = 'Client joined %s:%s\r\n' % (remhost, remport)
self.broadcast_string( str, newsock )
myServer = ChatServer( 2626 )
myServer.run()
答案 0 :(得分:0)
我们假设变量str
是你的二进制字符串。
您可以按照您指定的方式进行转换:
str = str.decode('utf-8').strip('\r\n')
如果这不起作用,请告诉我!