很奇怪的一个socket的问题,请大家看看

zuoyefeng 2004-10-19 03:23:03
最近我老是遇到一些很奇怪的问题,郁闷拉
我在写的一个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;

}
...全文
111 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zuoyefeng 2004-10-19
  • 打赏
  • 举报
回复
问题已经解决了,确实是lovingyou说的那个错误,是我没弄仔细
to xpdavis 是\r\n
谢谢各位:)
铖邑 2004-10-19
  • 打赏
  • 举报
回复
问题很可能就出在“\r\n”上,请楼主好好检查一下!
铖邑 2004-10-19
  • 打赏
  • 举报
回复
收到0个字节,说明服务器已经主动关闭连接,是否密码不正确或者是格式上有些问题?你确定发送命令是“\r\n”,不是“\n”吗?
lovingyou 2004-10-19
  • 打赏
  • 举报
回复
recv(s,(LPSTR)rpasBuff,strlen(rpasBuff),0);看看有没有问题呀?
如果rpasBuff没有内容,那么strlen(rpasBuff) ==0 ,也就是说接收的字节数为0 了。
recv(s,(LPSTR)rpasBuff,50,0)可以不?
netsys2 2004-10-19
  • 打赏
  • 举报
回复
换非阻塞的试试。

另外,可去读CB自带的POP3控件源代码

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧