Quick 支持 ipv6解决方案(cocos-lua同理)

cocos-lua同理。
一个个说吧。
如果用到了curl(也就是network.createHTTPRequest),按照官方教程升级curl就行了
如果用到了websocket 也按照官方出的教程升级下websocket就行了。
如果用到了luasocket。先看看版本吧,具体哪个版本以上忘记了。可以检测luasocket代码是否有tcp6()这个函数。如果有说明是支持的。然后在SocketTCP的connect里面加上判断
代码:
local isipv6_only = false
local addrinfo, err = socket.dns.getaddrinfo(self.host);
for i,v in ipairs(addrinfo) do
if v.family == “inet6” then
isipv6_only = true;
break;
end
end
print(“isipv6_only”,isipv6_only)
– dump(addrinfo)
if isipv6_only then
self.tcp = socket.tcp6()
else
self.tcp = socket.tcp()
end

OK了 很简单。升级过程中可能会出一些错误。一般都是文件没拷贝全之类的,逐一解决就行了。
最后切记如果按照我的方式只能使用域名。不能使用ipv4的或者ipv6的地址。而且服务器完全无需改动。
PS.
升级最好直接下载cocos3.11。然后找到相关模块完整拷贝。比如websocket,external/websockets 完整拷贝之后。还需要替换新的头文件。位置在cocos/network/WebSocket.cpp cocos/network/WebSocket.h
如果之前版本太低,可能会报错EVENT_RESET找不到。照着最新版的加上去就行了。

测试没有发现问题。我自己的项目今早通过审核了。用到了curl跟luasocket。

PS.
cocos-lua同理。没有区别。

3赞

谢谢了。正需要这个 。。。

请问下luasocket中传入的host也需要是域名吗?我传入域名的时候socket无法连接啊

支持岳老板:joy:

请问我用的是,quick3.3 final 不是社区版的也可以通过这样的修改解决ipv6的问题吗?

感谢分享, 和我们的做法大致相似!

在是否使用 ipv6 的判断上, 为了兼容 ipv4, 逻辑判断改为

支持ipv6 + host为域名  > socket.tcp6()

否则 > socket.tcp4()

是否更好一些?

用你这种方法soket连接服务器成功了,返回SOCKET_TCP_CONNECTED,可是服务器说只看到连接,收不到客户端发的数据,这是怎么回事?

这样行不通,正确的做法是判断客户端当前的ip地址,由客户端来决定使用ipv4还是ipv6,(前段时间刚好上appStore就是遇到这个问题,服务器同时支持ipv4和ipv6)

function Tcp:isSupportIpv6()
local client = socket.connect(“www.baidu.com”, 80)
local ip = client:getsockname()
local ipv6 = false

if string.find(ip, ":") ~= nil then
	ipv6 = true
end

return ipv6

end

function Tcp:connect(address, port)
if self:isSupportIpv6() then
self._socket = socket.tcp6()
else
self._socket = socket.tcp()
end

end

1赞