首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在HashLink上读取带有套接字的HTTP请求

在HashLink上读取带有套接字的HTTP请求
EN

Stack Overflow用户
提问于 2019-04-06 17:30:18
回答 1查看 259关注 0票数 3

我试图用HashLink (1.9.0)使用haxe (4)制作一个HTTP服务器,而套接字似乎工作得不太好。

代码语言:javascript
复制
import haxe.io.Error;
import sys.net.Host;
import sys.net.Socket;

class Main {
    static public function main() {

        var _aSocketDistant = new List<Socket>();

        var _oSocketMaster = new Socket();
        _oSocketMaster.bind( new Host( 'localhost' ), 8000);
        _oSocketMaster.setBlocking( false );
        _oSocketMaster.listen( 9999 );

        while(true) {

            // Accepting socket
            var oSocketDistant = _oSocketMaster.accept();
            if ( oSocketDistant != null ) {
                trace( 'opening : ' + oSocketDistant.peer() );
                oSocketDistant.setBlocking( false );
                _aSocketDistant.add( oSocketDistant );
            }

            // Trying to read from each socket 
            for ( oSocketDistant in _aSocketDistant ) {
                try {
                    trace( oSocketDistant.read() );
                } catch ( e :Dynamic ) {
                    if ( e != Error.Blocked )
                        throw e;
                }
            }

        }
    }
}

运行这段代码,然后使用火狐调用http://localhost:8000/,我将得到以下信息:

Main.hx:27:开头:{主机: 127.0.0.1,端口: 65154}

远处的套接字从来没有任何信息可读。它不应该发送请求吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-06 18:32:06

问题似乎在于read()的使用。看来这是不适用于非阻塞套接字。

您的实际问题是,read()将读取整个数据。在阻塞套接字上,该套接字将一直阻塞,直到连接关闭。在始终会引发Blocking的非阻塞套接字上。相反,您必须使用input.readBytes,它将返回读取的字节数,然后确保正确管理缓冲区数据。

在这种情况下,使用input.readLine()可能是最简单的解决方案:

代码语言:javascript
复制
trace(oSocketDistant.input.readLine());

这样,我就可以看到预期的HTTP请求:

代码语言:javascript
复制
Main.hx:20: opening : {host : 127.0.0.1, port : 50231}
Main.hx:29: GET / HTTP/1.1
Main.hx:29: Host: localhost:8008
Main.hx:29: Connection: keep-alive
Main.hx:29: Upgrade-Insecure-Requests: 1
Main.hx:29: User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36
Main.hx:29: DNT: 1
Main.hx:29: Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Main.hx:29: Accept-Encoding: gzip, deflate, br
Main.hx:29: Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7
Main.hx:29: Cookie: Idea-369662de=0cbb3289-7f2c-4f82-a094-7409dba8cfb0
Main.hx:29:
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55551674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档