1.初始化动态链接库

WSAStartup: The WSAStartup function initiates use of the Winsock DLL by a process.

WSAStartup函数使用一个进程来初始化Winsock动态链接库ws2_32.dll。

int WSAAPI WSAStartup(
WORD wVersionRequested, //用于协商winsock dll的最高版本
LPWSADATA lpWSAData
  //指向WSADATA数据结构的指针,该结构用于接收Windows套接字实现的详细信息
);

初始化成功返回0,否则返回错误码。

WSAStartup函数必须是应用程序或DLL调用的第一个Windows套接字函数。它允许应用程序或DLL指定所需的Windows套接字版本,并检索特定Windows套接字实现的详细信息。应用程序或DLL只能在成功调用WSAStartup后再发出Windows套接字函数。

int SocketInit()
{
WORD wVersionRequested; //用 2 bytes 的字来表示
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(, ); //DLL版本
err = WSAStartup(wVersionRequested, &wsaData);
if (err != )
{
printf("WinSock DLL版本不足要求\n");
return ;
}
if (LOBYTE(wsaData.wVersion) != ||
HIBYTE(wsaData.wVersion) != )
{
WSACleanup();
return ;
}
return ;
}

其中WORD类型是微软SDK中的类型,WORD的意思为字,是2byte的无符号整数,表示范围0~65535.

2.创建socket

socket:The socket function creates a socket that is bound to a specific transport service provider.

SOCKET WSAAPI socket(
int af, //地址族规范。地址族的可能值在Winsock2.h头文件中定义。
int type,
int protocol
);

af:

在Windows Vista及以后发布的Windows SDK中,头文件的组织发生了变化,地址族的可能值在Ws2def.h头文件中定义。注意,Ws2def.h头文件自动包含在Winsock2.h,不应该直接使用。

当前支持的值是AF_INET或AF_INET6,它们是IPv4和IPv6的Internet地址族格式。如果安装了地址族的Windows套接字服务提供者,则支持地址族的其他选项(例如,与NetBIOS一起使用的AF_NETBIOS)。注意,AF_地址族和PF_协议族常量的值是相同的(例如,AF_INET和PF_INET),因此可以使用任意一个常量。

type:

新套接字的类型规范。

套接字类型的可能值在Winsock2.h头文件中定义。

SOCK_STREAM  1  

A socket type that provides sequenced, reliable, two-way, connection-based byte streams with an OOB data transmission mechanism. This socket type uses the Transmission Control Protocol (TCP) for the Internet address family (AF_INET or AF_INET6).

SOCK_DGRAM2  2

A socket type that supports datagrams, which are connectionless, unreliable buffers of a fixed (typically small) maximum length. This socket type uses the User Datagram Protocol (UDP) for the Internet address family (AF_INET or AF_INET6).

......

protocol: 协议类型。

返回值:If no error occurs, socket returns a descriptor referencing the new socket. Otherwise, a value of INVALID_SOCKET is returned, and a specific error code can be retrieved by calling WSAGetLastError.

3.SOCKADDR_IN

typedef struct sockaddr_in {
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[];
} SOCKADDR_IN, *PSOCKADDR_IN, *LPSOCKADDR_IN;

4.connect

The connect function establishes a connection to a specified socket.

int WSAAPI connect(
SOCKET s, //A descriptor identifying an unconnected socket.
const sockaddr *name, //A pointer to the sockaddr structure to which the connection should be established.
int namelen //The length, in bytes, of the sockaddr structure pointed to by the name parameter.
);
if (SOCKET_ERROR == SocketInit())
return -; SOCKET sockClient = socket(AF_INET, SOCK_STREAM, );
SOCKADDR_IN addrSrv;
//addrSrv.sin_addr.S_un.S_addr = inet_pton(SeverIp);
inet_pton(AF_INET, SeverIp, &addrSrv.sin_addr); //设置addrSrv的ip
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons();
//设置端口号,convert an IP port number in host byte order to the IP port number in network byte order
connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); //客户端连接服务器

window_c++_socket编程_winsock2.h的更多相关文章

  1. 【vc】14_网络编程_socket编程

    1.计算机网络基本知识 最简单的网络程序如图: 提示:IP地址就相当于一个公司的总机号码,端口号就相当于分机号码.在打电话时,拨通总机后,还需要转到分机上. (1)协议 ·为进行网络中的数据交换(通信 ...

  2. Python_oldboy_自动化运维之路_socket编程(十)

    链接:http://www.cnblogs.com/linhaifeng/articles/6129246.html 1.osi七层 引子: 须知一个完整的计算机系统是由硬件.操作系统.应用软件三者组 ...

  3. Linux下一个C(编程入门.h档,.c档,而路多文件的调用)

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0 ...

  4. UNIX环境高级编程 apue.h头文件的配置

    http://jimslinbing.blog.163.com/blog/static/85054319201292712414518/ 1.到http://www.apuebook.com下载源码2 ...

  5. UNIX环境高级编程------apue.h找不到

    运行1-3代码时,出现问题:apue.h 没有找到问题 1.去此网址下载源码: http://www.apuebook.com/code3e.html 压缩包名为:src.3e.tar.gz 2.解压 ...

  6. TCP服务器和客户端_Socket编程

    TCP服务器 服务器启动文件 1 import java.io.IOException; 2 import java.net.ServerSocket; 3 import java.net.Socke ...

  7. UDP接收端和发送端_Socket编程

    UDP接收端 接收端启动文件 1 import java.net.DatagramSocket; 2 import java.net.SocketException; 3 4 public class ...

  8. linux 操作系统下c语言编程入门

    2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理  ...

  9. ARM指令教程

    ARM指令教程 ARM汇编程序特点: l         所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理 ...

随机推荐

  1. ML.NET

    ML.NET http://www.cnblogs.com/BeanHsiang/category/1218714.html 随笔分类 - 使用ML.NET实现NBA得分预测 摘要: 本文将介绍一种特 ...

  2. BZOJ_2099_[Usaco2010 Dec]Letter 恐吓信_后缀自动机+贪心

    BZOJ_2099_[Usaco2010 Dec]Letter 恐吓信_后缀自动机 Description FJ刚刚和邻居发生了一场可怕的争吵,他咽不下这口气,决定佚名发给他的邻居 一封脏话连篇的信. ...

  3. DTV 常用功能

    AVL/Audio Description(AD SWITCH)/HearingImpaired 文档来自:https://max.book118.com/html/2016/0706/4752022 ...

  4. Oracle 11g导出来的dmp导入到 10g的数据库(IMP-00010:不是有效的导出文件,头部验证失败)

    原文地址:http://www.cnblogs.com/alxc/archive/2011/03/25/1995279.html 因为喜欢新的东西,所以基本上电脑的开发工具都是最新的,oracle也装 ...

  5. 适用于PHP初学者的学习线路和建议

    [导读] 这篇文章是围绕PHP的学习问题,之前介绍过<重磅资料!Github上的PHP资源汇总大全><深入探讨PHP类的封装与继承><PHP的学习规划建议>等对PH ...

  6. Excel学习 -- 数据透视表功能

    Excel -- 数据透视表基础 数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等.所进行的计算与数据跟数据透视表中的排列有关.    之所以称为数据透视表,是因 ...

  7. Linux 常用命令九 tar

    一.tar命令 tar命令用于打包,解包. gzip命令用于压缩,解压缩. bzip2命令用于压缩,解压缩. 这三个是在linux中常用的,还有一些不常用的. tar打包: wang@wang:~/w ...

  8. bzoj 2792: [Poi2012]Well【二分+贪心】

    #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const ...

  9. bzoj 1306: [CQOI2009]match循环赛【dfs+剪枝】

    大力剪枝,最后洛谷上还开了o2才过-- 大概这样剪枝: 1.搜索中,一个队当前得分超过要求或者一个队剩下的比赛场数全赢也达不到要求则return: 2.注意到如果平局,最总分的贡献是2,否则是3,所以 ...

  10. P4412 [SHOI2004]最小生成树

    传送门 不难发现,对于每一条树边肯定要减小它的权值,对于每一条非树边要增加它的权值 对于每一条非树边\(j\),他肯定与某些树边构成了一个环,那么它的边权必须大于等于这个环上的所有边 设其中一条边为\ ...