在用UDP接受数据时小的数据包能收到,大的就完全丢失了。
发送方是java编写的server,当使用java的客户端接收时是不管数据大小都能收到,而VC的客户端只能收到小于1K多的数据,这是什么问题?发送也有类似问题
发送方是java编写的server,当使用java的客户端接收时是不管数据大小都能收到,而VC的客户端只能收到小于1K多的数据,这是什么问题?发送也有类似问题
解决方案 »
- 如何判断记录集为空
- MFC 关于使用EDIT控件的问题
- 求教:CScrollView的垂直滚动条不出现
- 关于VC实现硬盘中某一NTFS分区的容量变化,高手请进!
- CDC 坐标映射与打印问题,请高手指教
- 我连这些问题都不知道,大家鼓励鼓励!!!
- vc++访问word文档保存时出错。
- 如何在atl compostie control中创建一个button?
- 问题描述:在Access数据库中,时间类型的字段用ODBC绑定到MFC中的CRecordSet的派生类中,可是从
- 接收串口16进制数据设置计算机时间,急!!!!!!!!!!
- 在线等待,_variant_t类型赋值问题!~
- WM_CTLCOLOR,不是可以改变控件背景色吗?怎么控件还是白的?
超过部分应该用下一个报发送。
设置UDP的接收和发送的BUFFER看看
能贴出程序吗
TIMEVAL stTime;
TIMEVAL *pstTime = NULL;
if ( INFINITE != dwTimeout ) {
stTime.tv_sec = 0;
stTime.tv_usec = dwTimeout*1000;
pstTime = &stTime;
}
SOCKET s = (SOCKET) m_hSocket;
// Set Descriptor
if ( !FD_ISSET( s, &fdRead ) )
FD_SET( s, &fdRead );
// Select function set read timeout
DWORD dwBytesReceive = 0L; int res = select( s+1, &fdRead, NULL, NULL, pstTime);
byte buffer[2048];
SOCKADDR_IN sockfrom;
int nlen=sizeof(sockfrom); int start=0;
OutputDebugString(_T("CDataGramSocket::Receive begin receive\n"));
res = recvfrom( s, (LPSTR)buffer, 2048, 0,(SOCKADDR*)(&sockfrom),&nlen);
// while((res = recvfrom( s, (LPSTR)buffer, 2048, 0,(SOCKADDR*)(&sockfrom),&nlen))!=WSAEMSGSIZE){
if(res==SOCKET_ERROR){
OutputDebugString(_T("CDataGramSocket::Receive recvfrom error\n"));
CMyString str=CMyString("error code:")+*IntToString(GetLastError());
OutputDebugString(ToWideChar(str.cstr(),str.length()));
OutputDebugString(_T("\n"));
return -1;
}
if(res==WSAEMSGSIZE){
OutputDebugString(_T("CDataGramSocket::Receive recvfrom WSAMSGSIZE\n"));
CMyString str=CMyString("error code:")+*IntToString(GetLastError());
OutputDebugString(ToWideChar(str.cstr(),str.length()));
OutputDebugString(_T("\n"));
}
// TCHAR Addr[128];
// MultiByteToWideChar(CP_ACP,0,inet_ntoa(sockfrom.sin_addr),strlen(inet_ntoa(sockfrom.sin_addr)),Addr,128);
CMyString str=CMyString("CDataGramSocket::Receive from ")+CMyString(inet_ntoa(sockfrom.sin_addr)).trim()
+CMyString(":")+*IntToString(ntohs(sockfrom.sin_port)) +CMyString(" ")
+*IntToString(res)+CMyString(" bytes\n");
OutputDebugString(ToWideChar(str.cstr(),str.length()));
arraycopy(buffer,0,lpBuffer,start,res);
// start+=res;
// };
不过我是在WinCE上做的程序,如果这样那估计可能是CE的问题不是我程序的问题了。
不过java的程序在ce下也是能正常,这就奇怪了。