返回信息流#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")
int main()
{
WORD wVersionRequested = MAKEWORD(2,0);
WSADATA wsaData[1];
if(WSAStartup(wVersionRequested,wsaData))
{
printf("socket库的初始化失败。");
}
printf("socket库的初始化成功。");
SOCKET sock=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrs;
addrs.sin_family=AF_INET;
addrs.sin_addr.S_un.S_addr=inet_addr("163.177.65.211");//腾讯smtp访问
addrs.sin_port=htons(IPPORT_SMTP);
if(!bind(sock,(SOCKADDR*)&addrs,sizeof(addrs)))
{
printf("bind失败 \n");
}
else printf("bind成功。");
if(!connect(sock,(SOCKADDR*)&addrs,sizeof(addrs)))
{printf("connect失败 \n");
}
else printf("connect初始化成功。");
char msgs[]="quit";
char msgs1[256]="get nothing";
int c=recv(sock,msgs1,256,0);
std::cout<<msgs1<<std::endl;
std::cout<<c<<std::endl;
int a=send(sock,msgs,sizeof(msgs)/sizeof(char),0);
std::cout<<"send"<<a<<std::endl;
int b=recv(sock,msgs1,256,0);
std::cout<<b<<std::endl;
std::cout<<msgs1<<std::endl;
system("pause");
return 0;
}
总是说连接失败 是啥情况啊?我想要得到的结果就是向smtp发个quit指令,然后收到个消息!!!各位大神教教我吧
这是一条镜像帖。来源:北邮人论坛 / cpp / #73420同步于 2013/8/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
socket变成connect连接失败是啥问题?
zhongzenan
2013/8/26镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
最好写成 if(SOCKET_ERROR==connect(sock,(SOCKADDR*)&addrs,sizeof(addrs)))
{
std::cout<<"connect failed!"<<std::endl;
}
【 在 NoEndlessLi 的大作中提到: 】
: 连接成功返回0,你的connect()返回0,表示连接成功,而你认为返回0不成功。
大神我知道哪里出问题了
if(!connect(sock,(SOCKADDR*)&addrs,sizeof(addrs)))
if(connect(sock,(SOCKADDR*)&addrs,sizeof(addrs))==SOCKET_ERROR)
找你的方法我改了一下 成功了。太感谢了。 但是这两句话是有什么区别呀?我困惑了很长时间
如果连接成功 connect返回为0, !0=1 如果 0=SOCKET_ERROR 结果也是1啊?为什么就有错了呢?
#define SOCKET_ERROR (-1);
你用vs的转到定义看一下,SOCKET_ERROR = -1
当你连接成功时,返回0,不等于-1,不执行if语句。
如果返回的是SOCKET_ERROR 就是返回的-1,不等于0所以if判断语句为真,执行if语句
【 在 NoEndlessLi 的大作中提到: 】
: #define SOCKET_ERROR (-1);
: 你用vs的转到定义看一下,SOCKET_ERROR = -1
: 当你连接成功时,返回0,不等于-1,不执行if语句。
: ...................
啊啊啊 懂了,谢谢!!!!非常感谢。。。我2了,。,,,