Windows SOCKET编程 1

 

一、 Winsock

winsock  是一种标准API,主要用于网络中的数据通信,它允许两个或者多个应用程序在同一台机器上或者通过网络相互通信。

winsock 是一种网络编程的接口,而不是协议。

 

1.1 Winsock 的初始化

int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);

wVersionRequested---指定准备加载的Winsock 库的版本高位字节指定所需要Winsock库的次版本,低位字节指定主版本  使用宏 MAKEWORD(x,y)(x--高位字节,y--低位字节)来方便的获得 wVersionRequested 的正确值

lpWSAData ----- 指向LPWSADATA 结构的指针

typedef struct WSAData

{ WORD wVersion;

WORD wHighVersion;

char szDescription[WSADESCRIPTION_LEN+1];

char szSystemStatus[WSASYS_STATUS_LEN+1];

unsigned short iMaxSockets;

 unsigned short iMaxUdpDg;

char FAR * lpVendorInfo;

}

 WSADATA, FAR * LPWSADATA;

在使用Winsock 接口编写好应用程序之后,应该调用WSACleanup 函数,这个函数能够使Winsock 释放所有由Winsock分配的资源,并取消这个应用程序挂起的Winsock 调用

int WASCleanup(void);

 

1.2 协议寻址

通过 SOCKADDR_IN 结构来指定IP地址和服务端口信息,

struct sockaddr_in{
    short            sin_family; //必须设为 AF_INET,一遍告诉winsock此时正在使用IP地址族
    unsigned short      sin_port;  //通信端口号
    struct   in_addr      sin_addr;
    char               sin_zero[8];  //填充
};

 

把一个点分IP地址转换为一个32位无符号长整数

unsigned long inet_addr(

const char FAR* cp

);

 

1.3 字节序

主机字节顺序-------->网络字节顺序

u_long htonl(u_long hcstlong);

 

int WSAHtonl(

SOCKET s,

u_long hostlong,

u_long FAR* lpnetlong

);

 

u_short htons(u_short hostshort);

 

int WSAHtons(

SOCKET s,

u_short hostshort,

u_short FAR* lpnetshort

);

 

 

网络字节顺序------->主机字节顺序

u_long ntohl(u_long netlong);

 

int WSANtohl(

SOCKET s,

u_long netlong,

u_long FAR* lphostlong

);

 

u_short ntohs(u_short netshort);

 

int WSANtohs(

SOCKET s,

u_short netshort,

u_short FAR* lphostshort

);

 

演示 如何利用inet_addr 和htons 函数来创建SOCKADDR_IN 结构,并进行IPV4 寻址

SOCKADDR_IN  InternetAddr;

INT nPortId=5150;

InternetAddr.sin_family=AF_INET;

//

InternetAddr.sin_addr.s_addr=inet_addr("136.125.23.22");

InternetAddr.sin_port=htons(nPortId);

 

1.4 创建套接字

SOCKET socket(

int af,    //af 是协议的地址族  IPV4---AF_INET

int type,   //套接字类型  TCP/IP---->SOCK_STREAM,  UDP/IP ----> SOCK_DGRAM

int protocol  //用于在给地地址族和套接字类型具有多重入口时,对具体的传送做限定,

                 //TCP----->IPPROTO_TCP   UDP---->IPPROTO_UDP

)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值