2015-08-19 4 views
0

Im писать простой сокет программу, чтобы получить какие-то данные и обратное содержимое. Когда я передать обращенные содержимое его не посланные ..питон сокет не работает

Сервер

import socket 

s = socket.socket() 

host = socket.gethostname() 

port = 1234 

s.bind((host, port)) 

s.listen(5) 

while True: 
    c, addr = s.accept() 
    print('Got connection from', addr) 
    print('Received message == ',c.recv(50)) 
    s = c.recv(50)[::-1] 
    c.send(s) 
    c.close() 

клиент

import socket 
from time import sleep 
s = socket.socket() 

host = socket.gethostname() 

port = 1234 

s.connect((host, port)) 

print "Sending data" 
s.sendall("Hello!! How are you") 
print(s.recv(1024)) 
+0

вы получите Ничего напечатанное на стороне сервера? Вы вызываете 'recv' дважды (на сервере) без отправки между ними, но я не знаю, попадает ли он ко второму. Я предполагаю, что он заперт во втором «recv». – cdarke

+0

сокет - это базовая база IP, а не база доменов! Дайте ip или привяжите все интерфейсы ** "0.0.0.0" ** – dsgdfg

ответ

0

Проблема состоит в две строки в вашем сервере

Ваш сервер вызывает recv() внутри заявление печати. Это освобождает буфер. Затем вы снова вызываете recv(), но он уже освобожден предыдущим оператором и поэтому он блокирует.

Вам нужно позвонить recv() и хранить, что в s. Затем используйте s везде.

Попробуйте это для вашего сервера:

import socket 

s = socket.socket() 

host = socket.gethostname() 

port = 1234 

s.bind((host, port)) 

s.listen(5) 

while True: 
    c, addr = s.accept() 
    print('Got connection from', addr) 
    s = c.recv(50) 
    print('Received message == ',s) 
    c.send(s) 
    c.close() 
Смежные вопросы