Mark As Completed Discussion

To build a TCP server in C++, you can follow these steps:

  1. Create a socket using the socket() function. Specify the address family, socket type, and protocol.

    TEXT/X-C++SRC
    1int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    2if (sockfd == -1) {
    3  std::cout << "Failed to create socket" << std::endl;
    4  return 1;
    5}
  2. Bind the socket to an address and port using the bind() function. Specify the server address and port in a sockaddr_in structure.

    TEXT/X-C++SRC
    1struct sockaddr_in serverAddr;
    2serverAddr.sin_family = AF_INET;
    3serverAddr.sin_port = htons(8080);
    4serverAddr.sin_addr.s_addr = INADDR_ANY;
    5
    6if (bind(sockfd, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) == -1) {
    7  std::cout << "Failed to bind socket" << std::endl;
    8  return 1;
    9}
  3. Listen for incoming connections using the listen() function. Specify the maximum number of queued connections.

    TEXT/X-C++SRC
    1if (listen(sockfd, 5) == -1) {
    2  std::cout << "Failed to listen for connections" << std::endl;
    3  return 1;
    4}
  4. Accept incoming connections using the accept() function. Specify a sockaddr_in structure to store the client address.

    TEXT/X-C++SRC
    1struct sockaddr_in clientAddr;
    2unsigned int clientAddrSize = sizeof(clientAddr);
    3int clientSock = accept(sockfd, (struct sockaddr*)&clientAddr, &clientAddrSize);
    4if (clientSock == -1) {
    5  std::cout << "Failed to accept connection" << std::endl;
    6  return 1;
    7}
  5. Send and receive data on the client socket using the read() and write() functions.

    TEXT/X-C++SRC
    1char buffer[1024] = {0};
    2read(clientSock, buffer, 1024);
    3std::cout << "Received message: " << buffer << std::endl;
    4
    5const char* response = "Hello from the server!";
    6write(clientSock, response, strlen(response));
  6. Close the client socket and server socket using the close() function.

    TEXT/X-C++SRC
    1close(clientSock);
    2close(sockfd);

Here's an example code that demonstrates how to build a TCP server in C++:

TEXT/X-C++SRC
1#include <iostream>
2#include <sys/socket.h>
3#include <netinet/in.h>
4#include <unistd.h>
5
6int main() {
7  // Create a socket
8  int sockfd = socket(AF_INET, SOCK_STREAM, 0);
9  if (sockfd == -1) {
10    std::cout << "Failed to create socket" << std::endl;
11    return 1;
12  }
13
14  // Bind the socket to an address and port
15  struct sockaddr_in serverAddr;
16  serverAddr.sin_family = AF_INET;
17  serverAddr.sin_port = htons(8080);
18  serverAddr.sin_addr.s_addr = INADDR_ANY;
19
20  if (bind(sockfd, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) == -1) {
21    std::cout << "Failed to bind socket" << std::endl;
22    return 1;
23  }
24
25  // Listen for incoming connections
26  if (listen(sockfd, 5) == -1) {
27    std::cout << "Failed to listen for connections" << std::endl;
28    return 1;
29  }
30
31  // Accept incoming connections
32  struct sockaddr_in clientAddr;
33  unsigned int clientAddrSize = sizeof(clientAddr);
34  int clientSock = accept(sockfd, (struct sockaddr*)&clientAddr, &clientAddrSize);
35  if (clientSock == -1) {
36    std::cout << "Failed to accept connection" << std::endl;
37    return 1;
38  }
39
40  // Send and receive data on the client socket
41  char buffer[1024] = {0};
42  read(clientSock, buffer, 1024);
43  std::cout << "Received message: " << buffer << std::endl;
44
45  const char* response = "Hello from the server!";
46  write(clientSock, response, strlen(response));
47
48  // Close the client socket
49  close(clientSock);
50
51  // Close the server socket
52  close(sockfd);
53
54  return 0;
55}
CPP
OUTPUT
:001 > Cmd/Ctrl-Enter to run, Cmd/Ctrl-/ to comment