V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  monkeyWie  ›  全部回复第 30 页 / 共 32 页
回复总数  621
1 ... 22  23  24  25  26  27  28  29  30  31 ... 32  
2020-02-27 17:36:58 +08:00
回复了 monkeyWie 创建的主题 Go 编程语言 golang UDP 协议读取报文问题
@BBCCBB r 就是一个*net.UDPConn
2020-02-27 17:06:59 +08:00
回复了 monkeyWie 创建的主题 Go 编程语言 golang UDP 协议读取报文问题
@BBCCBB udp 读估计每次都是一个完整的 udp 报文,不存在和 tcp 那样用 Read()一次性读不完,所以我现在只要用最大字节数的 buf 去 Read()一次就行了,不用 io.ReadFull 了,毕竟响应的报文不一定有这么长,这个方法肯定阻塞。

@ma6254 现在没有 ReadFull()了,可能是 TCP 写多了,之前以为 UDP 和 TCP 一样可以这样读。 🤓
2020-02-27 16:36:05 +08:00
回复了 monkeyWie 创建的主题 Go 编程语言 golang UDP 协议读取报文问题
@BBCCBB 我现在只能确定 udp 响应包的最大长度,但是真实的响应可能没这么长,我看了 ioutil.ReadAll 源码,是要遇到 io.EOF 或者其它异常(比如超时)才能返回,但是 udp 协议并不存在关闭连接也就不会有 io.EOF ,所以我这里调用的话应该是一直阻塞着直到超时
2020-02-27 16:25:14 +08:00
回复了 monkeyWie 创建的主题 Go 编程语言 golang UDP 协议读取报文问题
@BBCCBB 用 ioutil.ReadAll 也不对呀,不是读完这次就 EOF,后面还有呢
2020-02-27 15:58:29 +08:00
回复了 monkeyWie 创建的主题 Go 编程语言 golang UDP 协议读取报文问题
@ma6254 n 我打印出来过了,都是 20 😂,其实是因为有 err,io.ReadFull()里面把 err 忽略掉了。
```
func ReadAtLeast(r Reader, buf []byte, min int) (n int, err error) {
if len(buf) < min {
return 0, ErrShortBuffer
}
for n < min && err == nil {
var nn int
nn, err = r.Read(buf[n:])
// nn=20,err!=nil
n += nn
}
if n >= min {
//读到了指定的字节数就置空 err
err = nil
} else if n > 0 && err == EOF {
err = ErrUnexpectedEOF
}
return
}
```
2020-02-27 15:55:25 +08:00
回复了 monkeyWie 创建的主题 Go 编程语言 golang UDP 协议读取报文问题
@ma6254 谢谢老哥耐心解答,我找到原因了,原来一直有 err 返回,只是 io.ReadFull()在读取到指定字节会把 err 置空,

错误信息:`wsarecv: A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datagram into was smaller than the datagram itself.`

看样子 upd 接收的缓冲区一定要大于要接收的这次报文,所以你 8L 提供的那种方法也是行不通的,现在我是直接开辟一个大点的 buf 用 conn.Read()接收,只能这样做了
2020-02-27 15:14:45 +08:00
回复了 monkeyWie 创建的主题 Go 编程语言 golang UDP 协议读取报文问题
@rio 大佬,第一个返回值不是读取到的字节数吗,和这个问题有啥关联啊?还请赐教
2020-02-27 13:42:40 +08:00
回复了 monkeyWie 创建的主题 Go 编程语言 golang UDP 协议读取报文问题
@BOYPT 不会的,TCP 协议的话读满之后还可以接着读后面的报文
2020-02-27 13:40:26 +08:00
回复了 monkeyWie 创建的主题 Go 编程语言 golang UDP 协议读取报文问题
@back0893 那如果不知道包的大小咋办,一般 body 的长度都放在 head 里,所以先读了一次 head
2020-02-26 17:43:12 +08:00
回复了 Drinker 创建的主题 Java 一个 Java 项目如果需要启用上万个 websocket,有什么好办法么
java 上 netty 轻松搞定好吧
2020-02-24 11:30:39 +08:00
回复了 tianshiyeben 创建的主题 程序员 开源项目有感
确实伸手党太多,之前弄了 4 个 QQ 群感觉人都快被问没了,后来也没时间维护了索性停了,现在产生了后遗症,不想打开 qq
2020-02-14 09:31:06 +08:00
回复了 monkeyWie 创建的主题 GitHub github 头像服务被墙了吗,看的好难受
@CoCoMcRee 刚刚测了几个 IP,改下 host 可以了 🤓
151.101.40.133 avatars2.githubusercontent.com
151.101.40.133 avatars0.githubusercontent.com
2020-02-06 17:18:06 +08:00
回复了 monkeyWie 创建的主题 深圳 回深圳光钎被老鼠咬断了
@OllyDebug 发现限速也还行,正常办公没什么问题,就是游戏更新不动难受 🥴
2020-02-04 20:30:28 +08:00
回复了 monkeyWie 创建的主题 程序员 有公司落地了数据库异地多活方案吗?
@opengps 数据同步的延迟问题怎么解决的啊?
2020-02-04 20:24:36 +08:00
回复了 dannnney 创建的主题 酷工作 [深圳][15k-35k] 这里有一个很有爱的技术团队招人啦~
离我住的地方太远了,不然可以试下
2020-02-03 11:26:27 +08:00
回复了 OMGZui 创建的主题 程序员 今天开始在家办公了,使用腾讯会议
今天在家用钉钉远程办公,还行就是不知道做什么
2020-01-26 19:57:28 +08:00
回复了 monkeyWie 创建的主题 问与答 没有鼠标有没有办法玩游戏
@loading 想玩 RPG 🤣
2020-01-19 18:37:04 +08:00
回复了 zzzmh 创建的主题 Java 问个问题, Java 有没有办法接入 gpu 运算,想写个暴力破解压缩包
笑死,这种暴力破解竟然是 io 密集型,难道你打开一个 10g 的加密压缩文件在输错密码之后要等 10g 数据验证完才提示密码错误吗
2020-01-16 18:02:13 +08:00
回复了 lyver 创建的主题 推广 除了集五福,咱们春节还能干点啥?(发福利呀~)
分母什么梗
手机连上,分享扫码就可以看到密码了
1 ... 22  23  24  25  26  27  28  29  30  31 ... 32  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2760 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 32ms · UTC 14:20 · PVG 22:20 · LAX 06:20 · JFK 09:20
Developed with CodeLauncher
♥ Do have faith in what you're doing.