我正在搞乱 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 次,而无需为每次发送都调用连接。如果我需要在每次需要发送时都与套接字建立新连接,那将无法完成工作。我知道有用于 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[:]))
第一个发送发送绑定(bind) pdu,运行良好,但第二个发送不工作。测试服务器没问题,因为之前测试过,从来没有出现过这样的问题。 2nd 应该发送解除绑定(bind)的 PDU 但它没有发送。
最佳答案
“永远不会调用第二个命令”是什么意思?程序挂了?如果你按 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
...
关于python - 无法两次写入python中的套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28519545/