базовый клиентский сервер: правильная передача строк - PullRequest
0 голосов
/ 24 марта 2012

Я делаю простой клиент / сервер, который будет передавать строки назад и вперед. Он лишь немного более продвинут, чем эхо-сервер. Тем не менее, у меня возникли проблемы с передачей строк. Сначала я столкнулся с проблемой, когда я использовал неправильный тип данных (не преобразующий в utf-8), но все еще имею проблему.

Вот мой код сервера:

import socket
import re 

host     = ''
port     = 15008
backlog  = 5 
size     = 1024
QUIT     = bytes("QUIT"    , "utf-8")
BYE      = bytes("BYE"     , "utf-8")
MATCH    = bytes("MATCH"   , "utf-8")
NO_MATCH = bytes("NO MATCH", "utf-8")

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((host,port)) 
s.listen(backlog)

while 1: 
    client, address = s.accept() 

    regex = client.recv(size)
    if regex == QUIT:
        client.send(BYE)
        client.close()
        break

    string = client.recv(size)
    if string == QUIT:
        client.send(BYE)
        client.close()
        break

    if re.match(regex, string):
        client.send(MATCH)
    else:
        client.send(NO_MATCH)

и код клиента:

import socket 

host = 'localhost' 
port = 15008
size = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((host,port))

s.send(bytes('[ws]', "utf-8"))
s.send(bytes('s', "utf-8")) 
data = s.recv(size) 
print('Should match: ' + data)

s.close()

Сейчас и сервер, и клиент просто зависают.

1 Ответ

1 голос
/ 24 марта 2012

Необходимо использовать декодирование.

data = s.recv(size).decode("utf-8")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...