Visual C++网络编程--Socket套接字编程

套接字:一种在网络中不同主机之间进行数据交换的通信桥梁,人们所使用的网络通信软件功能均是基于Socket套接字作为通信桥梁实现。

寻址方式:在Winsock中,用户可以使用TCP/IP地址家族中统一的套接字地址结构解决TCP/IP寻址中可能出现的问题,定义如下

1 struct sockaddr_in{

2   short     sin_family;  //指定地址家族即地址格式

3   unsigned  short  sin_port;  //端口号码

4   struct in_addr  sin_addr;   //ip地址

5   char    sin_zero[8];       //留作备用,需要指定为0

6 };

字节顺序:传输数据的排列顺序以网络字节顺序和主机字节顺序为主。从数据存储的角度来讲,网络自己诶顺序即将数据中最重要的字节首先进行存储,而主机字节顺序则将不重要的字节首先存储。

Winsock提供了网络字节顺序和主机字节顺序之间转换的函数。

Socket相关函数

  头文件包含:afxsock.h

  1.构造函数  

CSocket::CSocket();

    exp: 

  CSocket sock; 

      创建套接字对象指针

  CSocket *sock;  sock=new CSocket; 

  2.绑定地址信息

 BOOL Bind(const SOCKADDR* lpSockAddr , int nSockAddrLen);

  如果函数调用成功,则返回真,否则返回假;参数lpSockAddr制定要绑定的服务器地址结构,参数nSockAddrLen表示地址结构的长度。

  exp:

 1 CSocket sock;  //创建套接字对象

 2 sockaddr_in addr; //定义套接字地址结构变量

 3 in_addr in_add;   //定义IP地址结构变量

 4 addr.sin_family=AF_INET; //指定地址家族为TCP/IP

 5 addr.sin_port=htons(80);  //指定端口号

 6 addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

 7 //将字符串IP转换为网络字节顺序排列的IP

 8 sock.Bind((SOCKADDR*)addr,sizeof(addr))   

 9     //绑定套接字预地址结构

10 ...   //省略部分代码

  3.在服务器端,当地址信息绑定套接字成功后,还需要启用监听端口

BOOL Listen(int nConnectionBacklog=5);

  其中参数指的是套接字监听客户端请求的最大数目,有效范围是1~5,默认是5

  exp:

sock.Listen(5);

  4.连接服务器

BOOL Connect(const SOCKADDR* lpSockAddr,int nSockAddrLen);

  exp:

1 CSocket sock;  //创建套接字对象

2 sockaddr_in addr; //定义套接字地址结构变量

3 in_addr in_add;   //定义IP地址结构变量

4 addr.sin_family=AF_INET; //指定地址家族为TCP/IP

5 addr.sin_port=htons(80);  //指定端口号

6 addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

7 //将字符串IP转换为网络字节顺序排列的IP

8 sock.Connect((SOCKADDR*)addr,sizeof(addr));

9 //连接服务器

  5.信息交换

virtual int Receive(void* lpBuf, int nBufLen, int nFlags /* = 0 */);
virtual int Send(const void* lpBuf, int nBufLen, int nFlags /* = 0 */)

  其中lpbuf表示数据缓冲区地址,nBufLen表示数据缓冲区的大小,参数nFlags表示数据发送或接受的标志,一般情况下,设置为0.

  exp:

1 ...             //省略部分代码

2 char buff[]='a'; //定义并初始化数据缓冲区

3 sock.Send(&buff,sizeof(buff),0); //发送数据缓冲区中的数据

4 sock.Receive(&buff,sizeof(buff),0);  //接收数据并将数据存放在数据缓冲区中

5 ...   //省略部分代码

  6.关闭套接字对象

  

virtual void Close();

  exp:

...        //省略部分代码

sock.Close();    //关闭套接字对象

在VC中,将套接字设置为异步模式,可以调用函数WSAAsyncSelect()函数实现。

上一篇:Visual C++网络编程--笔记

你可能感兴趣的:(socket)