void CApplication::SendData(const char pBuffer[])
{
if(pBuffer == NULL)
{
Log()->Write(ELogMessageType_ERROR, "Cannot send NULL message.");
return;
}
// calculate the size of that data
unsigned long messageSize = strlen(pBuffer);
// fix our byte ordering
messageSize = htonl(messageSize);
if(isServer == true)
{
for(unsigned int i = ESocket_CLIENT0; i < ESocket_MAX; ++i)
{
// send the message size
if(m_Socket[ i ] > 0)
{
if(send(m_Socket[ i ], (char*)&messageSize, sizeof(messageSize), 0) == SOCKET_ERROR)
{
Log()->Write(ELogMessageType_ERROR, "[Application] Send error: %i to socket %i", WSAGetLastError(), m_Socket[ i ]);
continue;
}
// fix our message size back to host ordering
messageSize = ntohl(messageSize);
// send the actual message
if(send(m_Socket[ i ], pBuffer, messageSize, 0) == SOCKET_ERROR)
{
Log()->Write(ELogMessageType_ERROR, "[Application] Send error: %i to socket %i", WSAGetLastError(), m_Socket[ i ]);
continue;
}
Log()->Write(ELogMessageType_MESSAGE, "[Application] SEND: %s", pBuffer);
}
}
}
回答
你沒有處理的情況下,send()
發送的數據少於你所要求的。如果情況確實如此,則需要循環,直到所有數據都消失。如果客戶端斷開連接,您也不會處理錯誤,例如send()
可能會返回-1。
典型的方法是一樣的東西::
for(size_t to_go = messageSize; to_go > 0;)
{
int put = send(sock, buf, to_go);
if(put < 0)
{
perror("Socket send() error");
break;
}
buf += put;
to_go -= put;
}
這種嘗試發送全部剩餘消息,直到所有已發送。你當然需要適應你的特定變量名稱,做更好的錯誤處理,等等。請將上面的內容作爲草圖進行查看。
你認爲我應該如何解決這個問題? – user292188 2010-03-12 09:00:02
非常感謝你:) – user292188 2010-03-12 09:54:34
@crsin:隨時接受答案,如果你覺得它幫助了你。 :) – unwind 2010-03-12 10:01:48
- 1. 從服務器發送到客戶端
- 2. 我的客戶端沒有正確發送到服務器
- 3. 客戶端java udp不會發送到C#服務器
- 4. RMI客戶端和服務器程序
- 5. 不能發送圖像從服務器到客戶端在java
- 6. 我想從客戶端發送圖像到服務器(使用小程序)
- 7. 從客戶端發送序列化對象到服務器
- 8. 在iPhone上運行客戶端和服務器的客戶端 - 服務器Web應用程序 - 這可能嗎?
- 9. java程序客戶端觸發服務器端java程序
- 10. 爲什麼這個客戶端/服務器程序不會停止?
- 11. Java-udp編程 - 從服務器發送消息到客戶端
- 12. 我同時運行服務器應用程序和客戶端應用程序,但客戶端無法發送消息到服務器?
- 13. 服務器端客戶端程序C
- 14. 從客戶端發送文本到服務器端程序進行處理
- 15. 服務器發送dateTime obj和客戶端應打印到UI
- 16. Epress.js和AJAX,從服務器發送JSON到客戶端
- 17. Java:WebSocket服務器不會正確地向客戶端發送數據
- 18. 客戶端到服務器連接只發送不接收
- 19. 客戶端不發送文本到服務器
- 20. Socket.io不從客戶端發送數據到服務器
- 21. 不斷從服務器發送字節[]到客戶端?
- 22. 從C客戶端發送一個整數到Java服務器
- 23. 通過服務器發送BufferedImage到另一個Java客戶端
- 24. python服務器和java客戶端:從python服務器發送到java客戶端時圖像已損壞
- 25. Java中的RMI聊天程序 - 如何從客戶端發送消息到客戶端(不通過服務器)?
- 26. 插座C#發送和接收在服務器/客戶端程序
- 27. 在服務器客戶端TCP應用程序中發送和接收字節[]
- 28. WSDL第一個客戶端不發送SOAPAction的WCF服務器
- 29. 爲什麼這個socket.io服務器不響應我的客戶端程序?
- 30. 線程服務器,在客戶端之間發送消息
2件事情可能會阻止發送而不記錄它:你的isServer標誌是錯誤的,你所有的m_Socket都是0,沒有辦法從這裏檢查這個。 – stefaanv 2010-03-12 08:29:59
你正在做循環中的ntohl。這將對小端系統產生不利影響。 – stefaanv 2010-03-12 08:31:01