这段时间看了一下SOCK方面的API,我在使用recvfrom读取UDP数据的时候出现程序被卡住的状态。
当然信息来了一样接收得到信息,但是程序像卡住的状态的确不是很好。
后来看了一下CSocketMaster这个范例。
好像是创建了一个窗口用来接收信息,当FD_READ信息到达时才用recvfrom函数
接收信息。但是这个信息这样处理好象不对,收不到需要的Sock信息FD_READ...
Dim SockInfohWnd As Long, r As Long
SockInfohWnd = CreateWindowEx(0&, "STATIC", "SOCKET_WINDOW", 0&, 0&, 0&, 0&, 0&, 0&, 0&, App.hInstance, ByVal 0&)
r = GetWindowLong(SockInfohWnd, GWL_WNDPROC)
r = SetWindowLong(SockInfohWnd, GWL_WNDPROC, AddressOf WndProc)
...Public Sub WndProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
Debug.Print "收到消息:" & uMsg & " " & wParam
Select Case uMsg
Case RESOLVE_MESSAGE
Case SOCKET_MESSAGE
Select Case wParam
Case FD_CONNECT: '连接成功(用于TCP协议)
Case FD_WRITE: '发送信息
Case FD_READ: '收到数据
Case FD_ACCEPT: '收到连接请求(用于TCP协议)
Case FD_CLOSE: '关闭连接(用于TCP协议)
End Select
End Select
End Sub具体该如何处理这个窗口呢?怎样才能在WndProc里收到Sock的信息呢?原理是什么?有高手马上加分
当然信息来了一样接收得到信息,但是程序像卡住的状态的确不是很好。
后来看了一下CSocketMaster这个范例。
好像是创建了一个窗口用来接收信息,当FD_READ信息到达时才用recvfrom函数
接收信息。但是这个信息这样处理好象不对,收不到需要的Sock信息FD_READ...
Dim SockInfohWnd As Long, r As Long
SockInfohWnd = CreateWindowEx(0&, "STATIC", "SOCKET_WINDOW", 0&, 0&, 0&, 0&, 0&, 0&, 0&, App.hInstance, ByVal 0&)
r = GetWindowLong(SockInfohWnd, GWL_WNDPROC)
r = SetWindowLong(SockInfohWnd, GWL_WNDPROC, AddressOf WndProc)
...Public Sub WndProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
Debug.Print "收到消息:" & uMsg & " " & wParam
Select Case uMsg
Case RESOLVE_MESSAGE
Case SOCKET_MESSAGE
Select Case wParam
Case FD_CONNECT: '连接成功(用于TCP协议)
Case FD_WRITE: '发送信息
Case FD_READ: '收到数据
Case FD_ACCEPT: '收到连接请求(用于TCP协议)
Case FD_CLOSE: '关闭连接(用于TCP协议)
End Select
End Select
End Sub具体该如何处理这个窗口呢?怎样才能在WndProc里收到Sock的信息呢?原理是什么?有高手马上加分
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货