我需要清空套接字上的数据(确保没有东西可以接收).不幸的是,在python套接字模块中没有这个功能.
我用这种方式实现了一些东西:
def empty_socket(sock):
"""remove the data present on the socket"""
input = [sock]
while 1:
inputready, o, e = select.select(input,[],[], 0.0)
if len(inputready)==0: break
for s in inputready: s.recv(1)
Run Code Online (Sandbox Code Playgroud)
你怎么看?有没有更好的方法呢?
更新:我不想更改套接字超时.为什么我更喜欢选择阅读.
更新:最初的问题是使用"刷新"术语.似乎"空"是一个更好的术语.
更新 - 2010-02-27:我已经注意到该对关闭时的一个错误.inputready总是用套接字填充.我通过添加最大数量的循环来修复它.有更好的解决方案吗?
我有简单的TCP套接字程序,我想以10个字节的块发送字符串.服务器将加入块.但是我不确定如何将字符串拆分为二进制文件以及如何发送二进制文件块.我不想一次发送512个字节,而是多次发送10个字节.
我找到了一个可以将数据序列化为字节串(?)的模块Pickle,但是如何对此应用socket.send()?
服务器:
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("", my_port))
server_socket.listen(5)
client_socket, address = server_socket.accept()
data = client_socket.recv(512)
Run Code Online (Sandbox Code Playgroud)
客户:
message = "some string I want to send in chunks"
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((host, my_port))
client_socket.send(message)
client_socket.close()
Run Code Online (Sandbox Code Playgroud)