很奇怪的一个socket的问题,请大家看看
最近我老是遇到一些很奇怪的问题,郁闷拉
我在写的一个pop3的代码里遇到如下问题
我send user的时候成功,recv也正确
可是在send pass后,却只能recv到0个字节
socket是阻塞的流socket
另外我telnet试的时候很正常
实在是郁闷坏了,我怎么想也想不明白,各位给我看看吧,先谢谢了:)
示例代码如下
#include <iostream.h>
#include<winsock2.h>
int main(){
int iLength = 0;
int iEnd = 0;
char sBuff[255] = "";
char susrBuff[255] = "USER\20 mytest123456789\r\n";
char rusrBuff[255]="";
char spasBuff[255]="PASS 1234567890\r\n";
char rpasBuff[255] = "";
int iMsg = 0;
WSADATA Wsa;
WSAStartup(0x0101,&Wsa);
SOCKET s = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN sin;
sin.sin_addr.s_addr = inet_addr("202.108.44.153");
sin.sin_family = AF_INET;
//侦听端口
sin.sin_port = htons(110);
cout<<"connectting......"<<endl;
if(connect(s,(LPSOCKADDR)&sin,sizeof(sin)) == SOCKET_ERROR)
cout<<"Error: can't connect to server :("<<endl;
iLength = recv(s,(LPSTR)sBuff, strlen(sBuff),0);
iEnd = iLength;
sBuff[iEnd] = '\0';
if(iLength==SOCKET_ERROR)
cout<<"usr rcv err"<<endl;
else{
cout<<"rec:"<<sBuff<<endl;
}
//user name
if(send(s,(LPSTR)susrBuff,strlen(susrBuff),0)==SOCKET_ERROR){
cout<<"usr send err"<<endl;
}
else{
cout<<"usr send success"<<endl;
}
iLength = recv(s,(LPSTR)rusrBuff, strlen(rusrBuff),0);
iEnd = iLength;
rusrBuff[iEnd] = '\0';
if(iLength==SOCKET_ERROR)
cout<<"usr rcv err"<<endl;
else{
cout<<"rec:"<<rusrBuff<<endl;
}
//password
if(send(s,(LPSTR)(spasBuff),strlen(spasBuff),0)==SOCKET_ERROR){
cout<<"send pass err"<<endl;
}
else{
cout<<"pass send success"<<endl;
}
iLength = recv(s,(LPSTR)rpasBuff,strlen(rpasBuff),0);
iEnd = iLength;
rpasBuff[iEnd] = '\0';
if(iLength==SOCKET_ERROR)
cout<<"rcv err"<<endl;
else{
cout<<"rec:"<<rpasBuff<<endl;
}
//关闭连接
closesocket(s);
WSACleanup();
int i;
cin>>i;
return 0;
}