java socket recv_socket 下 recv 数据的问题

def recvMessage(self, sockHandle):#读取来自客户端的数据

strings = b""

getNullTime = 0

client = self.dictSocketHandle[sockHandle]

num = 1

totalLen = 0

while True:

try:

print("第"+str(num)+"次读取数据")

data = client.recv(1024) # 这儿如果没有拿够 1024 个字节的数据,那么会循环回来拿,但是,如果发现没有数据能拿到,socket 会自动中止,扔出一个异常,代码就结束执行,所以需要 try 一下。

print(len(data))

totalLen += len(data)

if len(data) == 0: # 通道断开或者 close 之后,就会一直收到空字符串。 而不是所谓的-1 或者报异常。这个跟 C 和 java 等其他语言很不一样。

self.epollHandle.modify(sockHandle, select.EPOLLHUP | select.EPOLLET)

break

# print("本次接收到的数据........", data)

strings = strings + data

getNullTime = 0

except IOError as err:

if err.errno == 11: # 发生 Resource temporarily unavailable 错误 错误码为 11,意为:数据尚未准备好,需要等待

if getNullTime >= 7:

break

else:

getNullTime = getNullTime + 1

print("第" + str(getNullTime) + "次获取到空数据,继续尝试中.......")

time.sleep(0.1)

# getNullTime = getNullTime + 1

# print("第" + str(getNullTime) + "次获取到空数据,继续尝试中.......")

else:

print("读取数据,未知 IO 错误")

self.epollHandle.modify(sockHandle, select.EPOLLHUP | select.EPOLLET)

break

except:

print("未知错误")

self.epollHandle.modify(sockHandle, select.EPOLLHUP | select.EPOLLET)

break

num += 1

print("数据总长度", totalLen)

return strings

socket 接收数据,数据量稍大,就会断开接收,然后该 socket 会立马再次接收,是什么问题?

第 75 次读取数据

2896

第 76 次读取数据

4344

第 77 次读取数据

7240

第 78 次读取数据

第 1 次获取到空数据,继续尝试中.......

第 79 次读取数据

第 2 次获取到空数据,继续尝试中.......

第 80 次读取数据

第 3 次获取到空数据,继续尝试中.......

第 81 次读取数据

数据总长度 755856

帧为:204

Unknown opcode %#x.12

解析数据帧暂时不用的状态

第 1 次读取数据

10240

第 2 次读取数据

10240

第 3 次读取数据

10240

第 4 次读取数据

10240

第 5 次读取数据

我很确定,此时没有第二个 socket 进来,我只是单纯发了一张 1.8M 的图片而已,小的文件是可以的,不知道为啥!!!求教

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值