winsock编程基于数据报套接字的回射程序,其中sendto()函数出现10047错误
我用VS2010写了一个基于数据报套接字的回射程序,打开服务器和客户端之后,在客户端输入IP,当客户端运行到SendTo()函数时,出现10047错误,求大神解答!!!!!
代码如下:
#include"winsock2.h"
#pragma comment (lib,"WS2_32.lib")
#include <iostream>
#include <stdio.h>
#include <string>
#include <algorithm>
#include <stdlib.h>
#define SEVER_PORT 9900
#define Max_size 1024
using namespace std;
char buf[1024];
int main(int argc,CHAR* argv[])
{
cout<<"*********************UDP回射系统客户端***********************\n"<<endl;
string ip;
WSADATA wsa;
SOCKET client_sock;
struct sockaddr_in client_addr;
struct sockaddr_in ser_addr;
int clilen = sizeof(client_addr);
int serlen = sizeof(ser_addr);
//初始化Socket环境
//初始化Socket动态库
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
{
cout<<"WSAStartup 无法初始化!"<<endl;
return 1;
}
cout<<"初始化完成...\n"<<endl;
//创建服务器socket
client_sock =socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
if (client_sock == INVALID_SOCKET)
{
cout<<"socket error!\n"<<endl;
return -1;
}
cout<<"创建完成...\n"<<endl;
cout<<"请输入服务器端IP地址:\n"<<endl;
getline(cin,ip);
memset(buf,0,sizeof(buf));
strcpy_s(buf,ip.c_str());
client_addr.sin_family = AF_INET;
client_addr.sin_port = htons(SEVER_PORT);
client_addr.sin_addr.S_un.S_addr = inet_addr(buf);//htonl(INADDR_ANY)
bind(client_sock,(sockaddr *)&client_addr,clilen);
while(1)
{
memset(buf,0,sizeof(buf));
string str;
cout<<"\n客户端发送的数据:"<<endl;
getline(cin,str);
//cout<<"\n"<<endl;
strcpy_s(buf,str.c_str());
if(strcmp(buf,"quit")==0)
{
cout<<"客户端退出"<<endl;
break;
}
if(sendto(client_sock,buf,Max_size,0,(SOCKADDR *)&ser_addr,serlen)==SOCKET_ERROR)/*就是这里*/
{
cout<<WSAGetLastError();
cout<<"出错"<<endl;
//return -1;
}
//cout<<1<<endl;
memset(buf,0,sizeof(buf));
//int buflen = Max_size;
//接收服务器响应的回射内容
recvfrom(client_sock,buf,Max_size,0,(SOCKADDR *)&ser_addr,&serlen);
cout<<"服务器端回射的数据: \n"<< buf<<endl;
}
closesocket(client_sock);
if (WSACleanup() == SOCKET_ERROR)
{
cout<<"cleanup 出错 "<<endl;
return -1;
}
/**/
WSACleanup();
system("pause");
return 0;
}