连接到远程主机(作为客户)
让我们尝试下用简单的能连接远程电脑的代码能解决什么。这样能让你更好的理解所有这些是怎么工作的以及防止出现混乱。
你需要找出你所要连接的远程计算机的信息,然后传递一个指针到这个神奇的函数结构,connect(),这个结构以及API见下面的列表,注意形式参数sin_zero是不需要的所以为空值
struct sockaddr_in
{
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
int PASCA; connect(SOCKET ,const struct sockadde*,int);
我强烈建议你自己手动敲出这里给出的所有代码,而不是简单的复制粘贴到你的编译器,虽然我知道这样可能会拖慢脚步,我相信并且经验告诉我手动敲代码会比你单纯的复制粘贴帮助你更好的理解程序。
//连接远程主机(清空申请)
//包含头文件
//不要忘记链接 libws2_32.a 到你的程序
#include<winsock.h>
SOCKET s; //socket 句柄
//连接-连接远程主机
bool ConnectTohost(int portNo, char* IPAddress)
{
//开始winsock
WSADATA wsadata;
int error = WSAStartup(0x0202,&wsadata);
//有什么事发生了吗?
if(error)
return false;
//我们得到了正确的winsock版本吗?
if(wssadata.WVersion !=0x0202)
{
WSACleanup();//清除winsock
return false;
}
//填充需要初始化socket的信息
SOCKADDR_IN target;//socket地址信息
target.sin_family=AF_INET;//地址家庭网络
target.sin_port = htons(PortNo);.//所需要连接的端口
target.sin_addr.s_addr = intet_addr(IPAddress);//目标IP
s= socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//建立socket
if(s==INVALID_SOCKET)
{
return false;//创建socket失败
}
//试着连接.......
if(connect(s, (SOCKADDR*)&target,sizeof(target))==SOCKET_ERROR)
{
return false;//连接失败
}
else
return true;//成功
}
//CLOSECONNECTION-关闭socket以及关闭所有与它的连接
void CloseConnection()
{
//如果存在socket存在则关闭
if(s)
Closesocket(s);
WSACleanup();//清除winsock
}
在你看接下来的东西以前,敲以上代码并运行看看。