大家好,我請教一個問題,希望能得到你的回答.謝謝.
網上說使用IOCP+新網路資料收發函式WSASend和WSARecv開發windows平臺服務端程式可以很高效.
int WSASend (SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesSent,
DWORD dwFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
int WSAAPI WSARecv (SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesRecvd,
LPINT lpFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
我有一個問題,就是大家都是怎么設計協議的呢?比如我除了windows平臺,其它如IOS,JAVA 平臺它們也可以發送:WSABUF結構的資料包嗎?那么服務端使用上面的 WSARecv 能正確收到資料嗎?如何解決呢?
也不知道我說清楚了沒有,我想知道用這兩個函式開發的服務端能接收所有平臺發來的SOCKET資料包嗎?
真誠期待你的回答.幫頂也行,謝謝!
uj5u.com熱心網友回復:
建議樓主學會使用抓包工具比如wiresharkuj5u.com熱心網友回復:
socket 和平臺無關,介面是一樣的,但是IOCP應該是平臺有關的,win下又IOCP別的平臺下就不一定有uj5u.com熱心網友回復:
使用抓包工具看看吧。。。。。uj5u.com熱心網友回復:
抓包我用的是 Microsoft Network Monitor 3.4windows客戶端使用WSASend 發送 WSABUF結構體資料 到windows服務端,服務端使用WSARecv能正確接收資料;
由于我知識儲備不足,不知道如何封裝一個下面這樣的結構體呢?好在非windows平臺也能使用..
typedef struct _WSABUF {
ULONG len; /* the length of the buffer */
__field_bcount(len) CHAR FAR *buf; /* the pointer to the buffer */
} WSABUF, FAR * LPWSABUF;
uj5u.com熱心網友回復:
目前還沒有非windows客戶端 與我這個服務端通訊過,只是提前預計在日后可能會遇上這種情況,所以上來問問過來人是怎么操作這個事的..
謝謝大家的回答...
uj5u.com熱心網友回復:
為什么沒有人來討論呀..大家一起來聊聊這個問題吧....
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/153650.html
標籤:網絡通信
