3.3版本WebSocket:sendString(table,table.nums(table))方法报错,求救

2.X版本中的websocket有一个self.socket:sendBinaryMsg(data, table.nums(data)) 这个方法,可以正常调用

3.X中上面这个方法变成了self.socket:sendString(data, table.nums(data)),

但是当我在3.3中调用的时候报错“argument #2 is ‘table’ ; ‘string’ expected”

看这意思是说第1个参数应该是string,但是传的是table,但是3.3的samples下的事例中也确实是这样调用的,

求问我在3.3中该怎么正常调用原来2.X版本的sendBinaryMsg方法?

![](file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\331824558\QQ\WinTemp\RichOle$K~5{C6P7~$S~S{`G63IXJW.png)

你应该不需要修改这个地方的吧

例子中self.socket:sendString(tostring(data))方法确实只有一个参数,并且就是string,

但是我想调用的是self.socket:sendString(data, table.nums(data))这个方法,第2张截图就是3.3WebSockets中的例子源码,可以明显看出红框里面他要传2个参数,并且第一个值是table,

您说的第一个参数就是string的方法貌似是第2张截图中第一个if里面调用的,但是我想调用的是else if 中的,也就是原来2.X中的self.socket:sendBinaryMsg(data, table.nums(data)) 这个方法,从第1张截图可以看出,2.X里面这个方法第一个传参也是table,请问哪里有错误么?

然后当我把第1个参数改为传string的时候,运行依旧报错 “argument #3 is number ; ‘no object’ expected”,可以看出sendString方法貌似只接受1个参数,但是例子中明显是传了2个参数的

嗯 我正在尝试不改这个,但是我估计没用,因为调用的方法都是同一个,估计会报同样的错误,并且因为例子只模拟提交了文本和非数组的BINARY内容,也就是说例子根本没走过self.socket:sendString(data, table.nums(data))这个方法,所以我估计还是不行

先确认一下,你的例子能否正常运行呢?

我查了3.3的绑定代码,已经确认sendString是只能传递一个string作为参数,不能用表的。你看到的例子里的代码是以前的遗留,虽然那里有对表的处理,但实际上不会用到。你可以看到在MainScene里面,发送二进制流之前,已经用table.concat将表转换成了string。

嗯,昨天研究了一天,翻到了2.2.5和3.3的luabinding中的定义,3.3中完全换了写法,只接受一个参数 并且是string,按照3.3中的写法应该是self.socket:sendString(tostring(table.concat(table))),我这个例子在2.2.5PLUS中可以正常运行,因为我服务端尝试用的是pomelo,对pomelo并不太熟悉,但是对比2.2.5及3.3发送过去后台接受到的数据明显不一样,但至少客户端要发送的table肯定是一模一样的,所以即便我按照3.3的写法self.socket:sendString(tostring(table.concat(table)))还是不能像2.2.5那样正常运行,太要命了,已经放弃,我在尝试用其他服务端,如果还不行,我会换回2.2.5或者2.6,放弃3.3,哎