2014-03-19 4 views
0

Я пытаюсь сделать клиент сокета в python, я могу отправить первое сообщение без ошибок, но пока я пытаюсь отправить второй, он останавливается, может кто-нибудь может помочь в этом?python async socket client

import socket , time 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
def OpenConnection(IP,PORT): 
    global sock  
    sock.connect((IP, PORT)) 
def SendMessage(StringMessage): 
    global sock 
    print "Step 1" 
    sock.send(StringMessage) 
    print "Step 2" 
    reply = sock.recv(1024) # limit reply to 1024K 
    print StringMessage 
    return reply 
def CloseConnection(): 
    global sock 
    sock.close() 
HOST, PORT = 'localhost', 34567 
OpenConnection(HOST,PORT) 
print SendMessage('test1') 
print "Sleep for 3" 
time.sleep(3) 
print "Sendind Second Message.." 
print SendMessage('test2') 
CloseConnection() 

ответ

1

Ваш код работает для меня - это сервер, к которому вы подключаетесь, чтобы отправить что-нибудь обратно? Я Netcat слушать на порту 34567. Вот выход сервера после первого запуска вашей программы:

$ nc -l 34567 
test1 

А вот клиент

$ python socktimeout.py 
Step 1 
Step 2 

На данный момент клиент ожидает в sock.recv(1024) вызова для ответа от сервера. Ввод сообщения (говорит «TEST») и нажатие на ввод в окне сервера позволяет продолжить код. Теперь сервер выглядит следующим образом:

$ nc -l 34567 
test1TEST 
test2 

И клиент:

$ python socktimeout.py 
Step 1 
Step 2 
test1 
TEST 

Sleep for 3 
Sendind Second Message.. 
Step 1 
Step 2 

Снова набрав сообщение и нажав клавишу ввод позволит вашей программе, чтобы закончить и закрыть соединение.

Обратите внимание, что нажатие на ввод требуется только в том случае, если netcat является строкой, буферизирующей ввод, если ваш сервер отправляет обратно данные с помощью какого-либо другого процесса, не обязательно добавлять строку, заканчивающуюся сообщением (хотя это может быть хорошая идея, в зависимости от вашего протокола).

EDIT

Вот конечное состояние сервера после отправки обратно еще одно сообщение:

$ nc -l 34567 
test1TEST 
test2TEST 
$ 

А вот клиент:

$ python socktimeout.py 
Step 1 
Step 2 
test1 
TEST 

Sleep for 3 
Sendind Second Message.. 
Step 1 
Step 2 
test2 
TEST 

$ 
+0

спасибо за ваш ответ, я получаю первое сообщение очень хорошо, но я не смог напечатать второе сообщение, так как я видел ваш последний блок кода, вы получаете первый «TEST», но вы не могли получить второй «ТЕСТ» или мне что-то не хватает? :)) – user2136174

+0

@ user2136174 Нет второго сообщения отлично работает также - я просто опустил его ради краткости. –

+0

тогда, я что-то упустил, спасибо. – user2136174