windows TCP socket在C++下的编程入门 3
2015-12-21 08:56
344 查看
连接到远程主机(作为客户)
让我们尝试下用简单的能连接远程电脑的代码能解决什么。这样能让你更好的理解所有这些是怎么工作的以及防止出现混乱。
你需要找出你所要连接的远程计算机的信息,然后传递一个指针到这个神奇的函数结构,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
}
在你看接下来的东西以前,敲以上代码并运行看看。
让我们尝试下用简单的能连接远程电脑的代码能解决什么。这样能让你更好的理解所有这些是怎么工作的以及防止出现混乱。
你需要找出你所要连接的远程计算机的信息,然后传递一个指针到这个神奇的函数结构,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
}
在你看接下来的东西以前,敲以上代码并运行看看。
相关文章推荐
- 2016太原网络营销师郭文军【运城】讲解事件营销掌握的重点?
- Word2vec 句向量模型PV-DM与PV-DBOW原论文翻译
- iOS开发网络请求——大文件的多线程断点下载
- 网络编程学习的一些网址
- 【2015新手赛网络赛】 1004 Good Subsets
- iOS开发网络篇—JSON介绍
- 网络-BIO-同步阻塞模型
- 网络-BIO-伪异步I/O
- httpClient 封装
- 多种服务器配置http自动跳转https方案
- HTTPS合理优化小技巧 HTTPS优化
- 百度:网站https加密不会对流量产生负面影响
- iOS9.2 HTTP请求无法加载数据
- 厦门巨游网络科技有限公司(HOTPOWER)承接游戏UI外包
- volley 访问网络时候获取json数据发生乱码问题解决方法,以及gson解析json数据。
- 谷歌搜索结果将优先指向HTTPS网页
- JDBCRealm Http Digest
- HttpServletResponse 下载附件
- java net.URLConnection http请求
- Linux无线网络设置(wpa_supplicant的使用)