udp程序的服务端,出了个错误
#include <winsock.h>
#include <iostream>
#pragma comment(lib,"ws2_32")
using namespace std;int main(int argc,int *argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return -1;
}
/* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we */
/* requested. */
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 )
{
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return -1;
}
/*create socket*/
SOCKET sSrv=socket(AF_INET,SOCK_STREAM,0);
if(INVALID_SOCKET==sSrv)
{
cout<<"create socket error"<<endl;
WSACleanup();
return -1;
}
/*bind*/
SOCKADDR_IN addrSrv;
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6001);
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
if(SOCKET_ERROR==bind(sSrv,(SOCKADDR *)&addrSrv,sizeof(addrSrv)))
{
cout<<"bind failed"<<endl;
closesocket(sSrv);
WSACleanup();
return -1;
}
/*recvfrom*/
char buf[1024];
ZeroMemory(buf,1024);
SOCKADDR_IN addrClient;
int len=sizeof(addrClient);
if(SOCKET_ERROR==recvfrom(sSrv,buf,1024,0,(SOCKADDR *)&addrClient,&len))貌似就是这里错了
{
cout<<"recf from failed"<<endl;
closesocket(sSrv);
WSACleanup();
return -1;
}
cout<<buf<<endl;
/*closesocket*/
closesocket(sSrv);
WSACleanup();
return 0;
}
运行以后显示recf from failed,应该是那个recvfrom函数不知怎么返回了个SOCKET_ERROR,请高手指导一下是怎么回事。
#include <winsock.h>
#include <iostream>
#pragma comment(lib,"ws2_32")
using namespace std;int main(int argc,int *argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return -1;
}
/* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we */
/* requested. */
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 )
{
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return -1;
}
/*create socket*/
SOCKET sSrv=socket(AF_INET,SOCK_STREAM,0);
if(INVALID_SOCKET==sSrv)
{
cout<<"create socket error"<<endl;
WSACleanup();
return -1;
}
/*bind*/
SOCKADDR_IN addrSrv;
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6001);
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
if(SOCKET_ERROR==bind(sSrv,(SOCKADDR *)&addrSrv,sizeof(addrSrv)))
{
cout<<"bind failed"<<endl;
closesocket(sSrv);
WSACleanup();
return -1;
}
/*recvfrom*/
char buf[1024];
ZeroMemory(buf,1024);
SOCKADDR_IN addrClient;
int len=sizeof(addrClient);
if(SOCKET_ERROR==recvfrom(sSrv,buf,1024,0,(SOCKADDR *)&addrClient,&len))貌似就是这里错了
{
cout<<"recf from failed"<<endl;
closesocket(sSrv);
WSACleanup();
return -1;
}
cout<<buf<<endl;
/*closesocket*/
closesocket(sSrv);
WSACleanup();
return 0;
}
运行以后显示recf from failed,应该是那个recvfrom函数不知怎么返回了个SOCKET_ERROR,请高手指导一下是怎么回事。
解决方案 »
- 线程中控制界面焦点?
- 直接学习ogre跳过opengl和DirectX可以吗
- WM_LBUTTONUP消息触发问题!!!高分求教!在线等!!!!!!!!急用!!!!!!!
- ATL编写IE插件的问题
- 散分!请求提供des加密算法c++源码
- 编译问题
- 小弟请问高手,如何将用VC实时采集的数据,用一个自动生成的文档保存下来
- 如何让dll中的hInstance指向自己,而不是调用此dll的应用程序?
- http://www.peopledaily.com.cn/GB/shizheng/252/6963/7007/index.html
- 请问FLASH控件在窗口中怎么用?
- 模态对话框有什么意义~?。。
- VC如何动态创建N个全局变量?点OnButton的时候
你这是基于TCP的协议。
SOCK_STREAM 改为 SOCK_DGRAM
你这是基于TCP的协议。
SOCK_STREAM 改为 SOCK_DGRAM
2楼错了,recvfrom也是阻塞函数,
所以一般MFC中不会直接用,
会用WSAAsyncSelect或IO端口那些WINSOCK IO模型写