我在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,但它没有发送。
答案 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
...