int Error;
SOCKET socket1;
WORD VersionRequested;
WSADATA WsaData;
VersionRequested=MAKEWORD(2,2);
Error=WSAStartup(VersionRequested,&WsaData); //启动WinSock2
char szError[256];
DWORD dwError = GetLastError();
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwError,
0,
szError,
sizeof(szError),
NULL);
::MessageBox(NULL,szError,"",0);
struct sockaddr_in local;
struct sockaddr_in from;
int fromlen =sizeof(from);
local.sin_family=AF_INET;
local.sin_port=htons(8000); ///监听端口
local.sin_addr.s_addr=htonl(INADDR_ANY); ///本机
socket1=socket(AF_INET,SOCK_DGRAM,0);
bind(socket1,(struct sockaddr*)&local,sizeof local);
dwError = GetLastError();
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwError,
0,
szError,
sizeof(szError),
NULL);
::MessageBox(NULL,szError,"",0);
while (1)
{
char buffer[1024]= "\0 ";
//printf( "waiting for message from others-------------\n ");
int rr=recvfrom(socket1,buffer,sizeof buffer,0,NULL,NULL)!=SOCKET_ERROR;
{ //MessageBox(NULL,"","",0);
FILE *file1;
file1=fopen( "c:\\Client.txt ", "a+ ");
fwrite(buffer,sizeof(char)*1024,rr,file1);
fclose(file1);
}
Sleep(500);
}
closesocket(socket1); 在服务程序中到int rr=recvfrom(socket1,buffer,sizeof buffer,0,NULL,NULL)!=SOCKET_ERROR;
就阻塞在那里,设置为非阻塞方式,返回为“无法立即完成一个非阻挡性套接字操作”,将这段代码放在一般程序中执行很好!
计算机一直在接受数据。。这到底是怎么回事儿呢????
SOCKET socket1;
WORD VersionRequested;
WSADATA WsaData;
VersionRequested=MAKEWORD(2,2);
Error=WSAStartup(VersionRequested,&WsaData); //启动WinSock2
char szError[256];
DWORD dwError = GetLastError();
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwError,
0,
szError,
sizeof(szError),
NULL);
::MessageBox(NULL,szError,"",0);
struct sockaddr_in local;
struct sockaddr_in from;
int fromlen =sizeof(from);
local.sin_family=AF_INET;
local.sin_port=htons(8000); ///监听端口
local.sin_addr.s_addr=htonl(INADDR_ANY); ///本机
socket1=socket(AF_INET,SOCK_DGRAM,0);
bind(socket1,(struct sockaddr*)&local,sizeof local);
dwError = GetLastError();
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwError,
0,
szError,
sizeof(szError),
NULL);
::MessageBox(NULL,szError,"",0);
while (1)
{
char buffer[1024]= "\0 ";
//printf( "waiting for message from others-------------\n ");
int rr=recvfrom(socket1,buffer,sizeof buffer,0,NULL,NULL)!=SOCKET_ERROR;
{ //MessageBox(NULL,"","",0);
FILE *file1;
file1=fopen( "c:\\Client.txt ", "a+ ");
fwrite(buffer,sizeof(char)*1024,rr,file1);
fclose(file1);
}
Sleep(500);
}
closesocket(socket1); 在服务程序中到int rr=recvfrom(socket1,buffer,sizeof buffer,0,NULL,NULL)!=SOCKET_ERROR;
就阻塞在那里,设置为非阻塞方式,返回为“无法立即完成一个非阻挡性套接字操作”,将这段代码放在一般程序中执行很好!
计算机一直在接受数据。。这到底是怎么回事儿呢????
把后两个参数改成
struct sockaddr_in from;
int fromlen =sizeof(from);
试试!
int rr=recvfrom(socket1,buffer,sizeof(buffer),0,(struct sockaddr*)&from,fromlen))!=SOCKET_ERROR
我也采用了你的方法,但是还是不行。
一执行到recvfrom(socket1,buffer,sizeof buffer,0,NULL,NULL)就阻塞。而且特奇怪的是,有时间还是能执行的
我昨天又重新建了一个工程,把代码写进去,一直好使。
但是刚才不知怎么地,突然间就不行了。现在就一直不行了。和前两天的毛病如出一辙。
怎么回事啊。搞得头都大了。
我使用另外一台计算机发送数据,不存在数据请求的问题。同一段代码,早上好好的,现在不知怎么了。用不了了。
我以为是计算机 的问题,就把开发用的计算机重装了。但是还是不能接到对方发来的数据。
又发现了一个新问题。虽然不能接到另一台计算机发送来的数据,但是在同一台计算机上用UPD调试助手向程序发数据,程序就能收着。这到底是怎么回事儿?