是高手就请进!
下面一段程序不知为什么一运行就告诉我以下的错误:
Compiling...
Recv.cpp
E:\Recv1\Recv.cpp(65) : warning C4018: '<' : signed/unsigned mismatch
E:\Recv1\Recv.cpp(75) : error C2664: 'recvfrom' : cannot convert parameter 6 from 'unsigned long *' to 'int *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.
Recv.exe - 1 error(s), 1 warning(s)
#include "stdafx.h"
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#define DEFAULT_PORT 514 //通信端口
#define DEFAULT_COUNT 25
#define DEFAULT_BUFFER_LENGTH 1024
int iPort = DEFAULT_PORT ;
char szInterface[32];
BOOL bInterface = FALSE;
DWORD dwCount = DEFAULT_COUNT,
dwLength = DEFAULT_BUFFER_LENGTH;
int main(int argc, char** argv)
{
WSADATA wsd;
SOCKET s;
char *recvbuf = NULL;
int ret,
i;
DWORD dwSenderSize;
SOCKADDR_IN sender,
local;
s = socket(AF_INET, SOCK_DGRAM, 0);
if(s == INVALID_SOCKET)
{
printf("socket() failed;%d\n", WSAGetLastError());
return 1;
}
local.sin_family = AF_INET;
local.sin_port = htons((short)iPort);
if(bInterface)
local.sin_addr.s_addr = inet_addr(szInterface);
else
local.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(s, (SOCKADDR *)&local, sizeof(local)) == SOCKET_ERROR)
{
printf("bind() failed: %d\n", WSAGetLastError());
return 1;
}
recvbuf = (char *)GlobalAlloc(GMEM_FIXED, dwLength);
if(!recvbuf)
{
printf("GlobalAlloc() failed :%d\n", GetLastError());
return 1;
}
//读数据包
for(i=0; i<dwCount; i++)
{
dwSenderSize = sizeof(sender);
ret = recvfrom(s,
recvbuf,
dwLength,
0,
(SOCKADDR *)&sender,
&(int)dwSenderSize); //////////////////////出错行
if(ret == SOCKET_ERROR)
{
printf("recvfrom() failed: %d\n", WSAGetLastError());
break;
}
else if(ret == 0)
break;
else
{
recvbuf[ret] = '\0';
printf("[%s] sent me : '%s'\n",
inet_ntoa(sender.sin_addr), recvbuf);
}
}
closesocket(s);
GlobalFree(recvbuf);
WSACleanup();
return 0;
}
请 高手指教!