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 的方式以及学 ...
随机推荐
- 【原创】大叔经验分享(48)oozie中通过shell执行impala
oozie中通过shell执行impala,脚本如下: $ cat test_impala.sh #!/bin/sh /usr/bin/kinit -kt /tmp/impala.keytab imp ...
- 快速搭建Docker Registry私有仓库
前提条件: 服务器已经安装Docker(我的服务器是CentOS 7) 服务器已经安装Docker Compose 满足以上条件时就可以开始搭建了: 1. 生成用户密码文件:(运行下面命令后会在当前目 ...
- gitignore规则探究
PS:转自https://blog.csdn.net/o07sai/article/details/81043474 网上有好多gitignore的帖子,文章,都说很简单的.但是我怎么就用不好呢? 我 ...
- docker启动,重启,停止容器
docker 启动已经停止的容器 docker start 容器ID或容器名 docker 停止容器 docker stop 容器ID或容器名 docker 启动一个容器 -d:后台运行 -p:端口映 ...
- webstorm 2019.1 注册教程
注册教程:https://blog.csdn.net/hdp134793/article/details/81530472 IntelliJ IDEA 注册码获取网站
- 使用Django的时候,页面请求正常,也没有报任何错误,甚至连警告都没有的情况下,页面却还是原地不动或者闪一下或者无限显示加载动画的情况下的解决办法
这个问题描述比较笼统,但根据我目前遇到过两种情况来看,似乎都比较重要而且实用,所以打算分别讲述一下. 说明:Django的版本是Django2.0 第一种:URL配置错误 页面闪一下,却原地不动,可能 ...
- adb连接夜神模拟器执行命令
1.要进入夜神模拟器的bin目录 2.连接夜神模拟器 3.执行命令 cd %~dp0 nox_adb.exe connect 127.0.0.1>nul set num= :ok set /a ...
- 关于8.0.15版本的mysql下载与安装
下载MYSQL 官网下载MYSQL8.0.15版本,链接地址https://www.mysql.com/downloads/,流程如下 点击进入后,网页滑到最下面,根据自己电脑的型号下载相应的版本 安 ...
- kettle的job定时任务的一个小问题
思考,启动此job,做一个最简单,job实现表输入和表输出,但是实现表输入和表输出要花2个小时.那么这个job定时是如何执行的呢???第一种情况.job定时60分钟即1个小时.当job执行结束(即用了 ...
- Ionic2中腾讯Bugly异常捕获以及上报
Ionic2混合开发,入坑系列:Ionic2中腾讯Bugly异常捕获以及上报 1.Ionic2中处理全局异常,直接继承IonicErrorHandler即可,代码如下 import { IonicEr ...