无法在python中写入套接字两次

时间:2015-02-14 19:45:07

标签: python sockets send smpp

我在python中搞乱smpp实现。在java中,我可以这样做:

output = new DataOutputStream(socket.getOutputStream());
out.write(someBytes)
do something else
output.write(someBytes)

当我尝试在python中执行相同操作时:

s=socket.socket()
host="host"
port=port
s.connect((host,port))
s.send(bytes(somedata[:]))
s.send(bytes(somedata[:]))

永远不会调用第二个命令。但如果我再建立一个联系:

s.send(bytes(data[:])) #send first
s.connect((host,port))
s.send(bytes(data[:])) #send second

然后它有效。我是python的新手,请原谅我,如果这是一个简单的问题。我阅读文档,找不到类似的东西。我需要能够发送到套接字n次,而不需要为每个send调用一个连接。如果我需要每次需要发送一个新的连接到套接字,那将无法完成这项工作。我知道smpp有python api,smpp也有java api,但我喜欢自己实现。 Java正在运行,现在需要在python中解决这个问题。

谢谢

编辑:

这是代码:

import socket

bindPdu=[0, 0, 0, 33, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 112, 97, 118, 101, 108, 0, 112, 97, 118, 101, 108, 0, 0, 0, 0, 0, 0, 0, 1, 0]
s=socket.socket()
host="localhost"
port=2775
s.connect((host,port))
unbind=[0,0,0,16,0,0,0,6,0,0,0,0,0,0,0,1]
s.send(bytes(bindPdu[:]))
s.send(bytes(unbind[:]))

第一次发送发送绑定pdu顺利,但第二次不起作用。测试服务器没问题,因为它之前已经过测试,从未出现过这样的问题。第二个应该发送unbind PDU,但它没有发送。

1 个答案:

答案 0 :(得分:1)

你是什么意思"第二个命令永远不会被调用"?该程序挂起?如果按Ctrl + C,它会给你追溯吗?

我可以在同一个套接字上多次调用send。也许这是您服务器的问题?

import socket
import time

s = socket.socket()
s.connect(("google.com", 80))

while True:
    s.send("GET / HTTP/1.1\nConnection: keep-alive\n\n".encode('utf8'))
    time.sleep(1)
    response = s.recv(1024*128)
    print("got {} bytes".format(len(response)))

输出:

$ python34 s.py
got 55236 bytes
got 55191 bytes
got 55228 bytes
got 55262 bytes
got 55244 bytes
got 55221 bytes
got 55252 bytes
...