[]Socket连接不上(已解决)

socket = new Socket();
socket.on(Event.OPEN, this, onSocketOpen); socket.connect("127.0.0.1", 8080);
照着官方例子,服务器显示连接上了,但onSocketOpen没调用到,而且socket的connected为false。
能帮忙看是什么原因么?
 
具体代码:
package
{
    import laya.display.Text;
    import laya.events.Event;
    import laya.net.Socket;
    import laya.utils.Byte;
    import laya.utils.Log;
    import laya.webgl.WebGL;

//    import laya.webgl.WebGL;
    
    public class LayaDemo 
    {
        private var socket:Socket;
        private var output:Byte;
        
        private var txt:Text;
        
        public function LayaDemo()
        {
            Laya.init(600, 300, WebGL);
            txt = new Text();
            txt.text = "This is a demo";
            txt.color = "#FF0000";
            txt.fontSize = 50;
            txt.stroke = 3;
            txt.strokeColor = "#FFFFFF";
            txt.pos(50, 100);
            Laya.stage.addChild(txt);
            
            
            
            socket = new Socket();
            
            output = socket.output;
            
            socket.on(Event.OPEN, this, onSocketOpen);
            socket.on(Event.CLOSE, this, onSocketClose);
            socket.on(Event.MESSAGE, this, onMessageReveived);
            socket.on(Event.ERROR, this, onConnectError);
            
            socket.connect("127.0.0.1", 8080);
            
//            txt.text = "Start conect";
            
            Laya.timer.loop(1000, this, checkSocket);
        }
        
        private function checkSocket(e:* = null):void{
            txt.text = socket.connected ? "Now connect" : "Not conect";
        }
        
        private function onSocketOpen(e:*=null):void
        {
            txt.text = "Socket open";
        }
        
        private function onSocketClose(e:*=null):void
        {
            Log.print("Socket closed");
        }
        
        private function onMessageReveived(message:*=null):void
        {
            Log.print("Message from server:");
            if (message is String)
            {
                Log.print(message);
            }
            else if (message is ArrayBuffer)
            {
                Log.print(new Byte(message).readUTFBytes());
            }
            socket.input.clear();
        }
        
        private function onConnectError(e:Event=null):void
        {
            Log.print("error");
            txt.text = "Socket error";
        }
    }
}
 
如果连接有返回,txt的文本应该为Socket open,但一直没有变动,还是This is a demo,而服务器关闭后,txt的文本就变为Socket error!
 
已经发现是服务器问题,问题解决~~~
已邀请:

Laya_XS

赞同来自:

你这代码我们看不出来具体问题,要不你就这个完整的示例提交下,我们查下问题

hoolive

赞同来自:

先谢谢xiaosong!!!package
{
    import laya.display.Text;
    import laya.events.Event;
    import laya.net.Socket;
    import laya.utils.Byte;
    import laya.utils.Log;
    import laya.webgl.WebGL;

//    import laya.webgl.WebGL;
    
    public class LayaDemo 
    {
        private var socket:Socket;
        private var output:Byte;
        
        private var txt:Text;
        
        public function LayaDemo()
        {
            Laya.init(600, 300, WebGL);
            txt = new Text();
            txt.text = "This is a demo";
            txt.color = "#FF0000";
            txt.fontSize = 50;
            txt.stroke = 3;
            txt.strokeColor = "#FFFFFF";
            txt.pos(50, 100);
            Laya.stage.addChild(txt);
            
            
            
            socket = new Socket();
            
            output = socket.output;
            
            socket.on(Event.OPEN, this, onSocketOpen);
            socket.on(Event.CLOSE, this, onSocketClose);
            socket.on(Event.MESSAGE, this, onMessageReveived);
            socket.on(Event.ERROR, this, onConnectError);
            
            socket.connect("127.0.0.1", 8080);
            
//            txt.text = "Start conect";
            
            Laya.timer.loop(1000, this, checkSocket);
        }
        
        private function checkSocket(e:* = null):void{
            txt.text = socket.connected ? "Now connect" : "Not conect";
        }
        
        private function onSocketOpen(e:*=null):void
        {
            txt.text = "Socket open";
        }
        
        private function onSocketClose(e:*=null):void
        {
            Log.print("Socket closed");
        }
        
        private function onMessageReveived(message:*=null):void
        {
            Log.print("Message from server:");
            if (message is String)
            {
                Log.print(message);
            }
            else if (message is ArrayBuffer)
            {
                Log.print(new Byte(message).readUTFBytes());
            }
            socket.input.clear();
        }
        
        private function onConnectError(e:Event=null):void
        {
            Log.print("error");
            txt.text = "Socket error";
        }
    }
}
 
代码如上:
如果连接有返回,txt的文本应该为Socket open,但一直没有变动,还是This is a demo,而服务器关闭后,txt的文本就变为Socket error!

qqzp63168

赞同来自:

楼主,能说下服务器哪里的问题么?
我遇到了同样的问题。

qqzp63168

赞同来自:

服务器需要按照http协议进行解码,WebSocketServerProtocolHandler处理数据
我这边用的netty4.x
下面是管道处理流程
        //HttpServerCodec: 针对http协议进行编解码
pipeline.addLast("httpServerCodec", new HttpServerCodec());
//ChunkedWriteHandler分块写处理,文件过大会将内存撑爆
pipeline.addLast("chunkedWriteHandler", new ChunkedWriteHandler());
/**
* 作用是将一个Http的消息组装成一个完成的HttpRequest或者HttpResponse,那么具体的是什么
* 取决于是请求还是响应, 该Handler必须放在HttpServerCodec后的后面
*/
pipeline.addLast("httpObjectAggregator", new HttpObjectAggregator(8192));

//用于处理websocket, /ws为访问websocket时的uri
pipeline.addLast("webSocketServerProtocolHandler", new WebSocketServerProtocolHandler("/ws"));

pipeline.addLast("myWebSocketHandler", new WebSocketHandler());//最后是自己消息处理逻辑

Smile~

赞同来自:

请问这是是怎么解决的啊!!能分享下代码吗   

要回复问题请先

商务合作
商务合作