L
lhz
Unregistered / Unconfirmed
GUEST, unregistred user!
M$的东东,真是“不怕做不到,只怕想不到”,出起错误来不管你想不想得
到,害你没商量。
先说一个简单的:关于异步Socket的问题。
M$的Win32SDK说可以用WSAAsyncSelect实现异步Socket。但是,我用尽各
种参数都没法让socket的sendto成为异步的。它总是要等到所有数据全部发
送完之后才返回。我用ioctlsocket也不行,它照行不误。我也用ICS的
WSocket控件和NMUDP控件测试过,都没法实现异步,虽然它们的文档都声称
可以异步的。sendto就真的不能异步吗?
WSAAsyncSelect不行,我就换WSASocket/WSASendTo。该死的Win32API要求
我必须在调用WSASendTo的同一个线程里面调用SleepEx/WaitForXXXEx系列
函数才行。我Sleep了,还怎么更新界面啊?没办法,只好新开一个线程,并
想方设法把参数传到线程里面。现在WSASentTo倒是异步了--一调用就返回,
也能正确响应回调函数。但新问题又来了--我在100Mb的SwitchHUB局域网上
发送一个16KB的包竟然要1秒多!!!!又试了上面的sendto,也是这效果。
即使用同步的sendto,也只有这速度。
100Mb的SwithHUB不行我换10Mb的共享式HUB。在10Mb共享式HUB上它倒是跑
得很欢,可是更怪的问题又来了:
我用3台机器来测试,分别以A,B,C表示。我用UDP的广播方式发送数据,
结果如下:
B发送,A、C收:正常
C发送,A、B收:正常
A发送,B、C收:C正常,B大量丢包(丢的比收到的多得多)
还没来得及用更多的机器测试。再测试不知还会出什么问题!!!
不知谁用成功过UDP广播的异步发送?我真是要气死了!!!
到,害你没商量。
先说一个简单的:关于异步Socket的问题。
M$的Win32SDK说可以用WSAAsyncSelect实现异步Socket。但是,我用尽各
种参数都没法让socket的sendto成为异步的。它总是要等到所有数据全部发
送完之后才返回。我用ioctlsocket也不行,它照行不误。我也用ICS的
WSocket控件和NMUDP控件测试过,都没法实现异步,虽然它们的文档都声称
可以异步的。sendto就真的不能异步吗?
WSAAsyncSelect不行,我就换WSASocket/WSASendTo。该死的Win32API要求
我必须在调用WSASendTo的同一个线程里面调用SleepEx/WaitForXXXEx系列
函数才行。我Sleep了,还怎么更新界面啊?没办法,只好新开一个线程,并
想方设法把参数传到线程里面。现在WSASentTo倒是异步了--一调用就返回,
也能正确响应回调函数。但新问题又来了--我在100Mb的SwitchHUB局域网上
发送一个16KB的包竟然要1秒多!!!!又试了上面的sendto,也是这效果。
即使用同步的sendto,也只有这速度。
100Mb的SwithHUB不行我换10Mb的共享式HUB。在10Mb共享式HUB上它倒是跑
得很欢,可是更怪的问题又来了:
我用3台机器来测试,分别以A,B,C表示。我用UDP的广播方式发送数据,
结果如下:
B发送,A、C收:正常
C发送,A、B收:正常
A发送,B、C收:C正常,B大量丢包(丢的比收到的多得多)
还没来得及用更多的机器测试。再测试不知还会出什么问题!!!
不知谁用成功过UDP广播的异步发送?我真是要气死了!!!