21xrx.com
2025-04-03 18:06:01 Thursday
文章检索 我的文章 写文章
C++ 套接字库
2023-07-05 13:18:07 深夜i     34     0
C++ 套接字 网络编程 TCP/IP 协议

C++ 套接字库是一组提供网络编程基本功能的库函数。它被广泛用于数据通信和软件开发中,可以实现各种网络应用程序,例如服务器、客户端和网络游戏等。

C++ 套接字库提供的主要功能包括建立和维护网络连接、发送和接收数据等。它通过多种协议和传输方式,如 TCP/IP、UDP 和 HTTP 等,为开发人员提供了多种选择。

C++ 套接字库的使用方法相对简单,只需要包含相应的头文件,创建套接字对象,然后设置参数和连接等操作即可。例如,以下代码段创建了一个 TCP 客户端套接字对象,并通过 HTTP 协议访问网站:

#include <iostream>
#include <winsock2.h>
using namespace std;
int main() {
  WSADATA wsaData;
  if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
    cout << "WSAStartup failed" << endl;
    return 1;
  
  SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  if (sock == INVALID_SOCKET)
    cout << "socket failed" << endl;
    return 1;
  
  sockaddr_in serverAddr;
  serverAddr.sin_family = AF_INET;
  serverAddr.sin_port = htons(80);
  serverAddr.sin_addr.s_addr = inet_addr("112.80.248.76");
  if (connect(sock, (sockaddr*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR)
    cout << "connect failed" << endl;
    return 1;
  
  const char* sendBuf = "GET / HTTP/1.1\r\nHost: www.baidu.com\r\n\r\n";
  if (send(sock, sendBuf, strlen(sendBuf), 0) == SOCKET_ERROR)
    cout << "send failed" << endl;
    return 1;
  
  char recvBuf[1024] = {0};
  int recvLen = recv(sock, recvBuf, sizeof(recvBuf), 0);
  if (recvLen == SOCKET_ERROR)
    cout << "recv failed" << endl;
    return 1;
  
  cout << recvBuf << endl;
  closesocket(sock);
  WSACleanup();
  return 0;
}

以上代码使用了 Winsock2 库,在 Visual Studio 中运行可直接访问百度首页,并将服务器返回的 HTML 内容输出到控制台上。

除了基本功能外,C++ 套接字库还支持异步操作、多线程处理等高级特性,能够满足更复杂的网络编程需求。

总之,C++ 套接字库是一种非常方便和强大的网络编程工具,它可以帮助开发者轻松构建各种网络应用程序,提高了软件开发的效率和质量。

  
  

评论区