Winsock编程基础1
//所有Winsock函数都是从WS2_32.DLL导出,包含相应库文件
#include <winsock2.h>
#pragma comment(lib, "WS2_32")
//若没有加载,调用scok函数返回的SOCKET_ERROR出错代码为WSANOTINITIALISED
int WSAStartup(
WORD wVersionRequested, //指定要加载的Winsock库版本,高字节次版本, 低字节主版本号,使用MAKEWORD(x, y)
LPWSADATA lWSAData //一个指向WSADATA结构的指针,用来返回DLL库的详细信息
);
typedef struct WSAData {
WORD wVersion; //库文件建议应用程序使用的版本
WORD wHighVersion; //库文件支持的最高版本
char szDescription[WSADESCRIPTION_LEN+];//库描述字符串
char szSystemStatus[WSASYS_STATUS_LEN+];//系统状态字符串
unsigned short iMaxSockets; //同时支持的最大套接字数量
unsigned short iMaxUdpDg; //废弃
char FAR * lpVendorInfo; //废弃
} WSADATA, FAR * LPWSADATA;
//成功返回0,否则要调用WSAGetLastError函数查看原因
int WSACleanup(void)
class CInitSock
{
public:
CInitSock(BYTE minorVer = , BYTE majorVer = )
{ //初始化WS2_32.DLL
WSAADATA wsaData;
WORD sockVersion = MAKEWORD(minorVer, majorVer);
if(::WSAStartup(sockVersion, &wsaData) != )
exit();
}
~CInitSock()
{
::WSACleanup();
}
}
//版本1使用sockaddr兼容
struct sockaddr {
u_short sa_family; /* address family */
char sa_data[]; /* up to 14 bytes of direct address */
};
//我们一般使用TCP/IP,所以上面的TCP/IP版本为
struct sockaddr_in {
short sin_family; //地址族(即指定地址格式),AF_INET(IP地址)
u_short sin_port; //端口号(不要使用0-1023以免影响公共服务)
struct in_addr sin_addr; //IP地址(32位)
char sin_zero[]; //空字节, 设为0, 为了与sockaddr兼容
};
//IP地址 in_addr结构
struct in_addr {
union {
struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; //4个u_char描述
struct { u_short s_w1,s_w2; } S_un_w; //2个u_short描述
u_long S_addr; //1个u_long描述
} S_un; //IP地址函数
unsigned long inet_addr(const char *cp) //将点分十进制IP地址字符串转换为32位二进制表示IP地址,二进制数按网络顺序存储
char* inet_ntoa(struct in_addr) //将32位二进制数转换为字符 //网络字节顺序为大端顺序(高字节低位), Intel为小端顺序(高字节高位)
u_short htons(u_short hostshort) //主机顺序转网络字节顺序
u_long htonl(u_long hostlong) //
u_short ntohs(u_short hostshort) //网络字节顺序转主机顺序
u_long ntohl(u_long hostlong)
sockaddr_in sockAddr;
sockAddr.sin_family = AF_INET;
sockAddr.sin_port = htons();
sockAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
//或使用下列初始化IP地址
sockAddr.sin_addr.S_un.S_un_b.s_b1 = ;
sockAddr.sin_addr.S_un.S_un_b.s_b2 = ;
sockAddr.sin_addr.S_un.S_un_b.s_b3 = ;
sockAddr.sin_addr.S_un.S_un_b.s_b4 = ;
Winsock编程基础1的更多相关文章
- Winsock编程基础介绍 .
相信很多人都对网络编程感兴趣,下面我们就来介绍,在网络编程中应用最广泛的编程接口Winsock API. 使用Winsock API的编程,应该了解一些TCP/IP的基础知识.虽然你可以直接使用Win ...
- Winsock编程基础2(Winsock编程流程)
1.套接字的创建和关闭 //创建套接字 SOCKET socket( int af, //指定套接字使用的地址格式,Winsock只支持AF_INET int type, //套接字类型 int pr ...
- WinSock编程基础
一.套接字模式 1.阻塞模式 创建套接字时,默认是阻塞模式,对recv函数调用会使程序进入等待状态,知道接收到数据才返回. 2.非阻塞模式: 可以调用ioctlsocke ...
- Winsock编程基础2(UDP流程)
UDP用户数据报协议 服务器端 <1 创建套接字(socket) <2 绑定IP地址和端口(bind) <3 收发数据(sendto, recvfrom) <4 关闭连接(cl ...
- windows socket网络编程基础知识
下面介绍网络7层协议在WINDOWS的实现: 7层协议 WIN系统 ________________________________________ 7 应用层 7 应用程序 ____________ ...
- 【网络编程1】网络编程基础-TCP、UDP编程
网络基础知识 网络模型知识 OSI七层模型:(Open Systems Interconnection Reference Model)开放式通信系统互联参考模型,是国际标准化组织(ISO)提出的一个 ...
- 第二章 Matlab面向对象编程基础
DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...
- [.net 面向对象编程基础] (1) 开篇
[.net 面向对象编程基础] (1)开篇 使用.net进行面向对象编程也有好长一段时间了,整天都忙于赶项目,完成项目任务之中.最近偶有闲暇,看了项目组中的同学写的代码,感慨颇深.感觉除了定义个类,就 ...
- Android开发4: Notification编程基础、Broadcast的使用及其静态注册、动态注册方式
前言 啦啦啦~(博主每次开篇都要卖个萌,大家是不是都厌倦了呢~) 本篇博文希望帮助大家掌握 Broadcast 编程基础,实现动态注册 Broadcast 和静态注册 Broadcast 的方式以及学 ...
随机推荐
- Elasticsearch一些使用笔记(持续更新)
这篇博客记录这一些运维ES的一些经验. 1.节点磁盘使用率过高,导致ES集群shard无法分配,丢失数据? 有两个配置,分配副本的时候 参数名称 默认值 含义 cluster.routing.allo ...
- idea工具maven生命周期clean,compile,install,package区别
idea工具maven projects里面有9种生命周期,今天刚好遇到,顺便分享下自己的理解.生命周期是包含在一个项目构建中的一系列有序的阶段.最常用的两种打包方法:一:clean,package( ...
- 烧写uboot和openwrt固件ARxx系列
以AR9331为例. 1.用烧录器将uboot烧写到flash中 (AR9331_U-Boot_Oolite-v1-v20170713.bin) 2.登录:192.168.1.1网页烧写uboot ...
- mysql explain结果含义
在SQL语句前面加上EXPLAIN即可 各字段含义 id SELECT识别符.这是SELECT的查询序列号 select_type SELECT类型,可以为以下任何一种: SIMPLE:简单SELEC ...
- 2018-2019-2 《网络对抗技术》Exp0 Kali安装 Week1
- 2018-2019-2 <网络对抗技术>Exp0 Kali安装 Week1 - 安装过程 - 安装Kali VMware上学期已经装好了,Kali的镜像文件是从同学那拷过来的,所以这两 ...
- 末学者笔记--Linux权限管理
一.权限概述 Linux系统一般将文件可存/取访问的身份分为3个类别:owner(拥有者).group(和所有者同组的用户).others(其他人,除了所有者,除了同组的用户以及除了超级管理员),且3 ...
- 学习现代 JavaScript 编程的最佳教程
天天编码 , 版权所有丨本文标题:0.0 学习现代 JavaScript 编程的最佳教程 转载请保留页面地址:http://www.tiantianbianma.com/the-modern-java ...
- pycharm创建scrapy项目教程及遇到的坑
最近学习scrapy爬虫框架,在使用pycharm安装scrapy类库及创建scrapy项目时花费了好长的时间,遇到各种坑,根据网上的各种教程,花费了一晚上的时间,终于成功,其中也踩了一些坑,现在整理 ...
- 关于tomcat WEB-INF/lib下类加载顺序
关于tomcat WEB-INF/lib下类加载顺序问题 问题描述 smc应用最近碰到一个线上问题,预发机器规则测试接口没问题,但是线上机器就是调用有问题,表面上看,maven模块引用的是自己想要的j ...
- ubuntu16.04之mongodb自动备份
cron服务是Linux的内置服务,但它不会开机自动启动.可以用以下命令启动和停止服务: service cron start service cron stop service cron resta ...