21xrx.com
2024-11-05 18:38:31 Tuesday
登录
文章检索 我的文章 写文章
C++服务端案例编写
2023-07-07 17:35:35 深夜i     --     --
C++ 服务端 案例编写 网络编程 多线程编程

随着互联网的不断发展,越来越多的应用需要与服务端进行通信,因此编写服务端成为了一项重要的技能。而C++作为一门高效且被广泛使用的编程语言,其也被广泛应用于服务端的编写。

本文将介绍一个简单的C++服务端案例,包括如何使用C++编写服务端和如何通过网络连接与客户端进行通信。

1.服务端的搭建

首先,我们需要搭建服务端。在C++中,我们可以使用系统提供的socket库来实现网络通信。通过socket库,我们可以创建一个服务端socket,并指定监听的端口。

int serverSocket = socket(AF_INET, SOCK_STREAM, 0);

if (serverSocket < 0)

  cout << "Socket create failed!" << endl;

  return -1;

int port = 8888;

struct sockaddr_in serverAddr;

bzero(&serverAddr, sizeof(serverAddr));

serverAddr.sin_family = AF_INET;

serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);

serverAddr.sin_port = htons(port);

if (bind(serverSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) < 0)

  cout << "Bind failed!" << endl;

  return -1;

if (listen(serverSocket, SOMAXCONN) < 0)

  cout << "Listen failed!" << endl;

  return -1;

通过上述代码,我们可以完成服务端的搭建,并开始监听端口。

2.接收并处理客户端请求

接下来,我们需要处理客户端请求。当客户端连接成功后,服务端会接收到一个新的socket来处理该客户端的请求。我们可以在while循环中使用accept函数来接收新的socket,并在一个新的线程中处理客户端请求。

while (true) {

  struct sockaddr_in clientAddr;

  socklen_t clientAddrLen = sizeof(clientAddr);

  int clientSocket = accept(serverSocket, (struct sockaddr*)&clientAddr, &clientAddrLen);

  if (clientSocket < 0)

    cout << "Accept failed!" << endl;

    break;

  thread clientThread(handleClientRequest, clientSocket);

  clientThread.detach();

}

在handleClientRequest函数中,我们可以读取客户端发送的消息,并依据具体业务逻辑进行处理。

void handleClientRequest(int clientSocket) {

  char buffer[1024];

  int n;

  while (true) {

    n = recv(clientSocket, buffer, sizeof(buffer)-1, 0);

    if (n <= 0)

      break;

    buffer[n] = '\0';

    //处理业务逻辑

    ...

    //发送消息

    const char* responseMsg = "Hello, client!";

    send(clientSocket, responseMsg, strlen(responseMsg), 0);

  }

  close(clientSocket);

}

3.客户端连接测试

最后,我们可以使用telnet工具来模拟客户端连接,并测试服务端是否正常运行。

telnet 127.0.0.1 8888

通过上述步骤,我们可以完成一个简单的C++服务端案例编写。当然,这只是一个示例,实际应用中还需要考虑更多的因素,例如线程安全、性能优化等。但通过这个例子,我们可以初步了解C++服务端的实现方式和基本流程。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复