V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  monkeyWie  ›  全部回复第 28 页 / 共 30 页
回复总数  590
1 ... 20  21  22  23  24  25  26  27  28  29 ... 30  
2020-03-31 14:56:23 +08:00
回复了 feast 创建的主题 宽带症候群 有没有传输是基于 TCP 的 BT 协议?
BT 一直都是基于 TCP 协议啊,不过后来也有基于 UDP 的 uTP,当然如果是 tracker 协议的话基本上都是走 UDP 的。
2020-03-30 15:52:59 +08:00
回复了 bfqymmt 创建的主题 Docker docker 如何快速更换 jar 包
为啥要停止删除 docker,一般在前面跑一个 nginx 负载均衡,两个容器做滚动升级就好了
@yulihao x-forwarded-for 不行啊,目标服务器基本都是直接拿的 remote_ip
@Raynard 有例子吗?
@jangit 客户端出网是外网 ip 呀,代理服务器和客户端不是一个局域网下的,代理服务器单独部署在外网。
@ThirdFlame 额,可能我没太说明白,我现在的角色是客户端和代理服务器,就是想让别人知道我的真实 ip,而不是代理服务器 ip
测试了一下,初步怀疑是 http1.0 协议的客户端直接被 pass,但是我用 curl 指定 http2.0 协议请求也是 403,但是验证肯定还是在 TLS 这层,不是 http 这层,估计 curl 和浏览器的 TLS 握手还是有区别的。
2020-03-03 10:34:47 +08:00
回复了 skypyb 创建的主题 Blogger 有一个持续更新了两年的博客,终于 有一天带给了我惊喜
卧槽,看完这个帖子我去翻了翻我的邮箱,发现也有收到,是华为的,华为 2012 实验室-可信理论、计算与工程实验室-开源软件部,不知道真的假的啊
2020-02-27 18:00:01 +08:00
回复了 monkeyWie 创建的主题 Go 编程语言 golang UDP 协议读取报文问题
@BBCCBB 都一样的,read()底层也是调用的 ReadFrom(),这个 @rio 就是个睿智,说了半天就一直在那秀优越,前面说的也全是错的,真的是 talk is cheap
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
1 ... 20  21  22  23  24  25  26  27  28  29 ... 30  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1823 人在线   最高记录 6547   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 28ms · UTC 16:31 · PVG 00:31 · LAX 09:31 · JFK 12:31
Developed with CodeLauncher
♥ Do have faith in what you're doing.