今天做了一个关于http
的测试,测试了一下广域网访问的可行性,如下:
uses zul_socket;
var
a:Tserver;
b:Vlabel;
t:longint;
begin
a:=Tserver.create;
a.port:=8080;
a.init;
t:=0;
while true do
begin
b:=a.accept;
a.send('testestest',b);
a.close(b);
t:=t+1;
writeln('time(s) ',t);
end;
end.
然后用localhost:8080
访问,显示localhost 发送的响应无效。
或者502 Bad Gateway
那不是显然的吗?没有使用http
协议导致浏览器无法识别
这时候如果我要连接到这个网站,只能使用自己获取这台电脑的IP然后socket
连接
但是这台电脑没有公网IP。。。。(不然我做这个测试干什么?)
这个时候我们就需要使用服务器转发技术
在控制台输入ngrok http 8080
(注册了账户后可以永久,而不是8个小时)
然后在浏览器打开这个网址,在cmd
窗口中输入netstat
查看浏览器连接到的ngrok
服务器的端口和IP
然后用socket
直接连接
Perfact!服务器返回了server
中的那个字符串
但是为了使结果跟可视化,我做了以下操作:
我在server
的代码中植入了http
协议,如下:
uses zul_socket;
var
a:Tserver;
b:Vlabel;
t:longint;
begin
a:=Tserver.create;
a.port:=8080;
a.init;
t:=0;
while true do
begin
b:=a.accept;
a.send('HTTP/1.1 200 OK'+#13#10+'Content-Type: text/html; charset=utf-8'+#13#10#13#10+'<h1>test</h1>'+#13#10,b);
{ a.close(b); }//这个时候就不要close了
t:=t+1;
writeln('time(s) ',t);
end;
end.
然后localhost:8080
,显示出一号字体的test
,测试成功
这时候我用ngrok
转发,仍然成功。
如果我需要单用户或者指定用户连接,只需要添加验证字段即可