2012-10-04 3 views
0

У меня есть целое число, которое я хочу передать через сокет на другой в python. Предположим, что это целое число a = 2. Как отправить это целое число через сокет через соединение. В настоящее время, я сделал следующий код:Отправить Целые числа через сокеты python

server_socket.send(str(a))   #Server side 


b=int(client_socket.recv(512))  #Client side 

, но вызов INT() дает мне ошибку, говоря, что его не допустимую длину. Я в основном не получаю, какой аргумент следует использовать в методе recv().

+0

Что скажет печать (client_socket.recv (512))? –

+0

дает ошибку где-то. нужно положить в клавиатуру прерывание –

+0

Также попробуйте ipython, если вы этого не сделали, гораздо проще отладить. –

ответ

1

Вы отправляете 4-байтовое целое через линию, но вы пытаетесь получить 512 байт, так что это просто выделение незанятого бита памяти так:

000000000000000000000000000 [... СниП кучи больше байт ...]

.... с байтами, которые он получает, так это выглядит:

F34D5DD20000000000000000000 [... СниП куча более байт ...]

таким образом, вы затем иметь 512-байтовый массив байтов, который не может быть преобразован в int. recv (4) или еще лучше использовать протокол, который обрабатывает динамические длины (что является единственным на самом деле стабильным решением этой проблемы, вы не можете ожидать, что recv (4) разрешит проблему).

+0

спасибо. помог мне..;) –

0

Если вы используете TCP-соединение, вы должны помнить, что это протокол потоковой передачи и, как таковой, не имеет сообщений фиксированного размера. Это означает, что при вызове recv вы можете получить меньше запрошенного количества байтов, даже меньше, чем то, что было отправлено с одним вызовом send. Вы также можете получить все, что вы запросили, если было больше звонков на send.

Все это означает, что ваш вызов recv может возвращать только часть строки, которая была отправлена, или больше. В любом случае полученная строка, по-видимому, недействительна как целое число. Чтобы посмотреть, что вы действительно получите, вы должны распечатать его.

Смежные вопросы