我的SOCKET代码服务器端recv函数的问题,请各位帮忙看一下。
SOCKET sersock,clisock; //服务器与客户端套接字struct sockaddr_in sa; //服务器信息
struct sockaddr_in cliaddr; //客户端信息
int serport=5000;
//端口号(尽量选一个大于1024的数,因为1024以前的基本都是系统保留或作为公共服务之用的)
//char buff[256]; //缓冲区(用于暂存要传递的信息)
WSADATA ws; //记录WinSock DLL信息
int len; //缓冲区长度
WORD wVersionRequested; //存储版本号
wVersionRequested=MAKEWORD(2,2); //得到版本号
if(WSAStartup(wVersionRequested,&ws)!=0) //初始化Winsock
{
SetWindowText(wndMain,"初始化失败");//cout<<"初始化Winsock失败!"<<endl;
return -1; //程序失败,出现非正常退出
}
SetWindowText(wndMain,"正在创建套接字");
sersock=socket(AF_INET,SOCK_STREAM,0); //创建套接字
memset(&sa,0,sizeof(sa)); //填充服务器地址结构(清零)
sa.sin_family=AF_INET;
sa.sin_port=htons(serport); //将一个整型变量从主机地址顺序转变成网络地址顺序,从而保证数据在不同主机之间传递能被正确解释
sa.sin_addr.s_addr=INADDR_ANY;
if(bind(sersock,(const sockaddr*)&sa,sizeof(sa))!=0)//绑定套接字到服务器
{
SetWindowText(wndMain,"绑定失败");return -1;//程序失败,出现非正常退出
}
else
SetWindowText(wndMain,"绑定成功");
if(listen(sersock,5)!=0)
//服务器套接字进行监听,第二个参数是允许等待连接的队列的最大长度
{
SetWindowText(wndMain,"监听失败");return -1;//程序失败,出现非正常退出
}
else
SetWindowText(wndMain,"等待连接请求");
len=sizeof(cliaddr);
clisock=accept(sersock,(struct sockaddr*)&cliaddr,&len);
if(flag)
send(clisock,buff,strlen(buff),0); //发送数据
else
{
memset(buff,0,sizeof(buff));
len=recv(sersock,buff,256,0); //客户端send函数是正常返回被发送字串长度。
switch(len) //实际返回值是SOCKET_ERROR
{
case 0:SetWindowText(btnSend,"0");break;
case SOCKET_ERROR:SetWindowText(btnSend,"SOCK_ERROR");break;
default:
char ch[5];itoa(len,ch,10);SetWindowText(btnSend,ch);break;
}
}
Sleep(10);
closesocket(clisock); //关闭连接
closesocket(sersock);
WSACleanup();