[请教]在WinCE下的socket()
[请问]在WinCE下的socket()?
我没有很好的网络编程的基础,麻烦大家多帮助。
请问,
为什么我在WinCE的eVC中的下面这句语句:
rawSocket = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
返回的始终是负值,所以一直是rawSocket = SOCKET_ERROR。
不仅在eVC的模拟器上是这样,就是在开发板上也是这样。
我在不懂的情况下,把SOCK_RAW换成SOCK_STREAM也不行。
请多指教。
------解决方案--------------------
socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)行不行?
------解决方案--------------------
有没有初始化网络环境
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2), &wsaData);
------解决方案--------------------
在系统初始化的时候
int err;
#ifdef _WIN32 // 如果是win32系统
WORD VersionRequested = MAKEWORD(2,2);
WSADATA wsaData;
err=WSAStartup(VersionRequested, &wsaData); // 启动winsock服务
if(err!=0)
{
AfxMessageBox( "初始化SOCKET失败! ");
return false;
}
if ( wsaData.wVersion != VersionRequested )
{
AfxMessageBox( "Wrong version or WinSock not loaded ");
//printf( "Wrong version or WinSock not loaded\n ");
//fflush(0);
return false;
}
#endif
------解决方案--------------------
#include <afxsock.h>
int PORT;
char* sendstr;
UINT SocketTComit(LPVOID lpParam)
{
//得到socket版本信息。
WORD wVersionRequested;// 定义版本信息变量
WSADATA wsaData;//定义数据信息变量
int err;//定义错误号变量
wVersionRequested = MAKEWORD(1,1);//给版本信息赋值
err = WSAStartup(wVersionRequested, &wsaData);//给错误信息赋值
if(err!=0)
{
::AfxMessageBox( "Socket fail ");
return 0;//告诉用户找不到合适的版本
}
else
{
if(LOBYTE(wsaData.wVersion)!= 1|| HIBYTE(wsaData.wVersion)!=1)
{
::AfxMessageBox( "Socket fail ");
WSACleanup();//告诉用户找不到合适的版本
return 0;
}
else
{
//#define PORT 34000 /// Select any free port you wish
AfxSocketInit(NULL);
CSocket sockSrvr;
sockSrvr.Create(PORT); // Creates our server socket
sockSrvr.Listen(5); // Start listening for the client at PORT
while (1)
{
CSocket sockRecv;
int m= sockSrvr.Accept(sockRecv); // Use another CSocket to accept the connection
if(m> =0)
sockRecv.Send(sendstr,128);
}
}
}
return 0;
}
我没有很好的网络编程的基础,麻烦大家多帮助。
请问,
为什么我在WinCE的eVC中的下面这句语句:
rawSocket = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
返回的始终是负值,所以一直是rawSocket = SOCKET_ERROR。
不仅在eVC的模拟器上是这样,就是在开发板上也是这样。
我在不懂的情况下,把SOCK_RAW换成SOCK_STREAM也不行。
请多指教。
------解决方案--------------------
socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)行不行?
------解决方案--------------------
有没有初始化网络环境
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2), &wsaData);
------解决方案--------------------
在系统初始化的时候
int err;
#ifdef _WIN32 // 如果是win32系统
WORD VersionRequested = MAKEWORD(2,2);
WSADATA wsaData;
err=WSAStartup(VersionRequested, &wsaData); // 启动winsock服务
if(err!=0)
{
AfxMessageBox( "初始化SOCKET失败! ");
return false;
}
if ( wsaData.wVersion != VersionRequested )
{
AfxMessageBox( "Wrong version or WinSock not loaded ");
//printf( "Wrong version or WinSock not loaded\n ");
//fflush(0);
return false;
}
#endif
------解决方案--------------------
#include <afxsock.h>
int PORT;
char* sendstr;
UINT SocketTComit(LPVOID lpParam)
{
//得到socket版本信息。
WORD wVersionRequested;// 定义版本信息变量
WSADATA wsaData;//定义数据信息变量
int err;//定义错误号变量
wVersionRequested = MAKEWORD(1,1);//给版本信息赋值
err = WSAStartup(wVersionRequested, &wsaData);//给错误信息赋值
if(err!=0)
{
::AfxMessageBox( "Socket fail ");
return 0;//告诉用户找不到合适的版本
}
else
{
if(LOBYTE(wsaData.wVersion)!= 1|| HIBYTE(wsaData.wVersion)!=1)
{
::AfxMessageBox( "Socket fail ");
WSACleanup();//告诉用户找不到合适的版本
return 0;
}
else
{
//#define PORT 34000 /// Select any free port you wish
AfxSocketInit(NULL);
CSocket sockSrvr;
sockSrvr.Create(PORT); // Creates our server socket
sockSrvr.Listen(5); // Start listening for the client at PORT
while (1)
{
CSocket sockRecv;
int m= sockSrvr.Accept(sockRecv); // Use another CSocket to accept the connection
if(m> =0)
sockRecv.Send(sendstr,128);
}
}
}
return 0;
}