苦恼我很长时间的问题,UDP
以下程序为何收数据有时收不到,或有时收到的字节数不对,哪位高手给予菜鸟指点?
void __fastcall TForm1::Button1Click(TObject *Sender)
{
WSADATA WSAData;
BOOL optval=TRUE;
sockport=1601;
int iErrorCode = WSAStartup(MAKEWORD(2,1),&WSAData);
sockfd=socket(AF_INET,SOCK_DGRAM,0);// WSASocket
if(sockfd==INVALID_SOCKET){
sprintf(szTmp,"Client creating socket fail! Error No.is%d",WSAGetLastError());
MessageBox(NULL,szTmp,"Warning",MB_ICONEXCLAMATION);
closesocket(sockfd);
exit(EXIT_FAILURE);
}
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(char FAR*)&optval,sizeof(optval));
int hh=89;
server.sin_family=AF_INET;
server.sin_addr.s_addr=INADDR_ANY;
server.sin_port=htons((unsigned short)sockport);
iErrorCode = bind (sockfd, (struct sockaddr FAR *)&server, sizeof(struct sockaddr));
if( WSAAsyncSelect(sockfd,hwnd1,UM_SOCK,FD_READ|FD_CLOSE)==SOCKET_ERROR) //
{
sprintf(szTmp,"AsyncSelecting error! Error No.is%d",WSAGetLastError());
MessageBox(NULL,szTmp,"Warning",MB_ICONEXCLAMATION);
}
hwnd1= FindWindow("TForm1","广播接收平台");
int MsgResult = SendMessage(hwnd1, UM_SOCK, 0, 0); // hwnd this->Handle
// int MsgResult1 = SendMessage(this->Handle, UM_SOCK, 0, 0); // hwnd this->Handle
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OnRecv(TMessage &Msg)
{
int length,namelen;
char ztf[39000],wg[80];
Finished=FALSE;
namelen=sizeof(SOCKADDR);
if((length=recvfrom(sockfd,ztf,30000,0,(struct sockaddr FAR*)&server,(int FAR*)&namelen))==SOCKET_ERROR)
{
if(WSAGetLastError()!=WSAEWOULDBLOCK)
{
sprintf(wg,"Send data failure!Error No. is%d",WSAGetLastError());
MessageBox(NULL,szTmp,"Warning",MB_ICONEXCLAMATION);
closesocket(sockfd);
}