zoukankan      html  css  js  c++  java
  • CSocket类的使用

    重点介绍一个MFC中CSocket类的使用

    1、创建套接字

    使用CSocket类创建套接字对象是通过该类的构造函数创建的。其原型如下:

    1 CSocket::CSocket();

    例如,用户创建CSocket类对象,代码如下:

    1 CSocket sock;

    如果用户需要创建套接字对象指针,则应该使用关键字new进行创建。代码如下:

    1 CSocket *sock;
    2 sock = new CSocket;

    2、绑定地址信息

    如果用户创建服务器套接字,那么用户应该调用该类的函数Bind()将套接字对象与服务器地址信息绑定在一起。起原型如下:

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

    该函数的作用是将套接字对象与服务器地址结构绑定在一起。如果函数调用成功,则返回true;否则返回false。参数lpSockAddr指定要绑定的服务器地址结构,参数nSockAddrLen表示地址结构的长度。例如用户将上面创建的套接字对象与地址结构绑定,代码如下:

    1 CSocket sock;
    2 sockaddr_in addr;
    3 addr.sin_family = AF_INET;
    4 addr.sin_port = htons(80);
    5 // 将字符串ip转换为网络字节序排列的ip
    6 addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    7 sock.Bind((SOCKADDR*)&addr, sizeof(addr));

    在服务器端,当地址信息绑定套接字成功后,还需要调用函数Listen()在指定端口监听客户端连接请求。函数Listen()的原型如下:

    1 BOOL Listen(int nConnectionBackLog = 5);

    参数nConnectionBackLog表示套接字监听客户端请求的最大数目。该参数的有效范围是1-5。默认是5,表示该套接字只能监听5个客户端所发送的连接请求。例如,套接字监听5个客户端的连接请求,代码如下:

    1 sock.Listen(5);

    3、连接服务器

    客户端创建套接字成功以后,可以调用函数Connect()向服务器发送连接请求。函数原型如下:

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

    该函数调用成功则返回true,否则,将返回false。参数lpSockAddr表示将连接的服务器地址结构。参数nSockAddrLen表示地址结构的长度大小。例如,服务器IP地址为          “127.0.0.1”,端口为80,客户端连接服务器,代码如下:

    1 CSocket sock;
    2 sockaddr_in addr;
    3 addr.sin_family = AF_INET;
    4 addr.sin_port = htons(80);
    5 // 将字符串iP转换为网路字节序排列的IP
    6 addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    7 sock.Connect((SOCKADDR*)&addr, sizeof(addr));

    4、数据交换

    无论是服务器,还是客户端都通过函数Send()和Receive()进行数据交换。函数原型如下:

    1 virtural int Send(const void *lpBuf, int nBufLen, int nFlags = 0);
    2 virtural int Receive(void *lpBuf, int nBufLen, int nFlags = 0);

    其中,函数Send()用于发送数据缓冲区的数据,函数Receive()用于接收对方发送的数据,并将数据放在指定的缓冲区中,参数lpBuf表示数据缓冲区地址。参数nBufLen表示缓冲区的大小。参数nFlags表示数据发送或结构的标志,一般情况下,该参数设置为0,例如,使用这两个函数进行数据的发送和接收,代码如下:

    1 char szBuf[] = 'a';
    2 sock.Send(szBuf, sizeof(szBuf), 0); // 发送数据缓冲区中的数据
    3 sock.Receive(szBuf, sizeof(szBuf), 0); // 接收数据并存放在缓冲区中

    5、关闭套接字对象

    当服务器和客户端的通信完成之后,用户还必须调用函数Close()函数将套接字对象关闭。否则,程序可能在退出时发生错误,该函数原型如下:

    1 virtual void Close();

    例如,客户端关闭套接字对象,代码如下:

    sock.Close();

    套接字关闭的同时,也将服务器与客户端端之间的连接关闭了。

    注意:当我们创建VC应用程序时,如果没有为应用程序指定支持Windows Socket,那么我们需要手动添加该类的头文件afxsock.h,否则,程序将不能使用CSocket类。

    摘自:《Visual C++ 网络编程案例实战》 清华大学出版社

  • 相关阅读:
    C++设计模式之享元模式
    C++设计模式之中介者模式
    C++设计模式之职责链模式
    C++设计模式之命令模式
    C++设计模式之桥接模式
    C++设计模式之单例模式
    C++设计模式之组合模式
    C++设计模式之备忘录模式
    C++设计模式之适配器模式
    操作系统(4)实验0——准备知识、基本内联汇编、扩展内联汇编
  • 原文地址:https://www.cnblogs.com/lit10050528/p/3667677.html
Copyright © 2011-2022 走看看