python - 无法两次写入python中的套接字

标签 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 次,而无需为每次发送都调用连接。如果我需要在每次需要发送时都与套接字建立新连接,那将无法完成工作。我知道有用于 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/

相关文章:

python - 获取python for循环中的第一个和最后一个项目

python - 如何使用两个键对列表进行排序,但其中一个键的顺序相反?

c++ - 发送批量消息时 BOOST::async_wait 错误

Android示例蓝牙代码通过蓝牙发送一个简单的字符串

swift - 未调用 DidEndSendingToApplication

python - SSH 进入 Django Shell

python - 无法使用 Ubuntu 17.04 VirtualBox VM 运行/导入 pip 安装的 python 包

c - 将套接字绑定(bind)到 IPv6 地址

c - 非阻塞套接字接收

java - 监听时在 Socket 上发送