python异步套接字客户端

时间:2014-03-19 01:06:21

标签: python sockets client

我正在尝试在python中创建一个套接字客户端,我可以发送第一条消息,没有错误,但是当我尝试发送第二条消息时,它会停止,有人可以帮忙吗?

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 个答案:

答案 0 :(得分: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

再次键入消息并按Enter键将允许您的程序完成并关闭连接。

请注意,仅当netcat是行缓冲输入时才需要按Enter键,如果您的服务器使用其他进程发送回数据,则不要求在消息后面附加一行(尽管它可能是好的想法,取决于你的协议)。

修改

以下是发回另一条消息后的最终服务器状态:

$ 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

$