windows网络编程学习笔记一

来源:互联网 发布:淘宝美工要学多久 编辑:程序博客网 时间:2024/04/30 07:59

    Windows的初始化

1.每个winsock应用都必须加载合适的winsock dll 版本是通过WSAStartup函数实现的。定义如下:

int WSAStartup(                                                                 //加载winsock库

                         WORD wVersionRequested,                    //用于指定真被夹在的winsock库的版本,用MAKEWORD(x,y)来获得wVersionRequested的值

                         LPWSADATA IpWSAData);                      //指向LPWSADATA结构的指针,该结构定义如下:

 

typedef struct WSAData

{

   WORD wVersion;

   WORD wHighVersion;

  ....

}WSADATA,*LPWSADATA;

 

程序完成后调用WSACleanup函数来释放资源。

 

2.WINSOCk调用失败最常见的返回值是socket_error。

 

应用程序框架

#include<winsock2.h>
#include<iostream>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
int main(){
 WSADATA wsaData;
 int Ret;
 if((Ret=WSAStartup(MAKEWORD(2,2),&wsaData))!=0){
  cout<<Ret;
  return -1;
 }
 if(WSACleanup()==SOCKET_ERROR){
  cout<<WSAGetLastError();
 }
 return 0;
}

 

3.协议寻址:

   应用程序通过sockaddr_in结构来指定ip地址和服务端口信息,格式如下:

struct sockaddr_in

{

   short                      sin_family;    //winsock 正在使用的的地址簇 

   u_short                  sin_port;     //端口号

   struct in_addr        sin_addr;    //把ip地址作为一个4字节的量存储起来,它是一个无符号长整型整数。

   char                      sin_zero[8];

}

 

inet_addr 用于把一个点分法表示的ip地址转换成一个32位无符号整数。定义如下:

unsigned long inet_addr

{

     const char  FAR *cp

};

 字节排序函数:

主机字节顺序转换成网络字节顺序:u_long htonl(u_long hostlong);

int WSAHtonl(SOCKET s,u_long hostlong,u_long FAR * ipnetlong);

 

 

如何创建SOCKADDR_IN结构

SOCKADDR_IN  InternetAddr;

INT nPortId=5150;

InternetAddr.sin_family=AF_INET;

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

InternetAddr.sin_port=htons(nPortId);

 

 

4.创建套接字:

SOCKET  socket(int af,    //协议地址簇

                            int type,  //协议套接字类型   tcp/ip应设为SOCK_STREAM

                          int  protocol);

0 0
原创粉丝点击