[疑难] ServerSocket 用法?
hurd
2008-12-11
我用winsock Expert抓下面两个程序运行时候输出到firefox的包,结果不一样,谁知道为什么?
import tango.net.Socket; import tango.net.SocketConduit; import tango.net.ServerSocket; import tango.util.log.Trace; void main(){ auto server = new ServerSocket (new InternetAddress(88)); while(1){ Socket req = server.accept.socket; void[] buf; buf.length = 1024; auto len = req.receive(buf); void[] buf2 = "HTTP/1.1 200 OK\r\nDate: Thu, 11 Dec 2008 06:21:17 GMT\r\n\r\n123\0"; req.send(buf2); } } 上面的输出 引用 HTTP/1.1 200 OK
Date: Thu, 11 Dec 2008 06:21:17 GMT 123 import tango.net.Socket; import tango.net.SocketConduit; import tango.net.ServerSocket; import tango.util.log.Trace; void main(){ auto server = new ServerSocket (new InternetAddress(88)); while(1){ SocketConduit req = server.accept; char[1024] buf; auto len = req.read(buf); req.write("HTTP/1.1 200 OK\r\nDate: Thu, 11 Dec 2008 06:21:17 GMT\r\n\r\n123\0"); req.close; req.shutdown; req.detach; } } 上面的输出了: HTTP/1.1 200 OK Date: Thu, 11 Dec 2008 06:21:17 GMT 123 /1.1 200 OK Date: Thu, 11 Dec 2008 06:21:17 GMT 123 第二个例子抓到了2个包,这是bug还是用法错误? 我用1.033+tango 0.97以及http://downloads.dsource.org/projects/tango/snapshots/tango-bin-win32-CURRENT-dmd.1.035.zip都试了,是一样的结果。 |
|
hurd
2008-12-11
....
|
|
tomqyp
2008-12-11
试了你的第二段代码没有你说的两个包的情况,不知道你用什么抓的包,如果客户端是自己写的,最好还是先检查一下客户端的代码。
|
|
hurd
2008-12-13
可能winsock Expert这个工具有问题,但是我多次试验发现凡是用了SocketConduit的情况接受端抓的包就和发送的不一致, 而直接用Socket就没问题。 真是奇怪了。。
|