21xrx.com
2024-09-19 09:55:14 Thursday
登录
文章检索 我的文章 写文章
C++监听端口的实现方法
2023-07-01 03:11:26 深夜i     --     --
C++ 监听端口 实现方法

在C++中实现监听端口功能可以通过Socket相关的API实现。下面是一种常见的方法:

1. 创建Socket

在创建Socket前先包含 头文件。使用Socket函数创建一个Socket对象,该对象会与一个端口关联起来。例如:


WSADATA wsaData;

SOCKET sListen;

sockaddr_in local;

int nBindRet;

// 初始化Windows socket环境

if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)

  return;

// 创建socket

sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if (sListen == INVALID_SOCKET) {

  WSACleanup();

  return;

}

这里创建了一个TCP类型的Socket对象sListen,并将其与IP协议族AF_INET和TCP协议IPPROTO_TCP关联起来。

2. 绑定端口

通过bind函数将Socket对象sListen和指定的端口关联起来。例如:


char *localaddr = "127.0.0.1";

int port = 8000;

local.sin_family = AF_INET;

local.sin_addr.s_addr = inet_addr(localaddr); 

local.sin_port = htons(port);

nBindRet = bind(sListen, (sockaddr*)&local, sizeof(local));

if (nBindRet == SOCKET_ERROR) {

  closesocket(sListen);

  WSACleanup();

  return;

}

这里将Socket对象sListen绑定到127.0.0.1:8000的端口上。

3. 监听端口

通过调用listen函数告诉Socket对象sListen可以开始监听端口上的连接请求。例如:


int nListenRet;

// 监听端口

nListenRet = listen(sListen, SOMAXCONN);

if (nListenRet == SOCKET_ERROR) {

  closesocket(sListen);

  WSACleanup();

  return;

}

SOMAXCONN是Windows允许进行的最大连接数。

4. 接受连接请求

通过调用accept函数来接受客户端的连接请求,如果有客户端请求连接,则接受请求并返回一个新的Socket对象用于交互。例如:


SOCKET sClient;

sockaddr_in clientAddr;

int nClientAddrLen;

char szBuffer[MAXBYTE];

// 循环接受客户端请求

while (true) {

  printf("Waiting for connection...\n");

  nClientAddrLen = sizeof(clientAddr);

  sClient = accept(sListen, (sockaddr*)&clientAddr, &nClientAddrLen);

  if (sClient == INVALID_SOCKET) {

    printf("Fail to accept! Error Code: %d\n", WSAGetLastError());

  } else {

    printf("An client connect!\n");

    // 进行通信

    // ...

  }

}

在接受到客户端连接请求后,可以通过返回的新Socket对象sClient和客户端进行通信,例如发送和接收数据。

总结

通过以上方法,C++可以很方便地实现监听端口的功能。使用Socket相关的API并遵循网络编程的规范,可以保证程序的正确性和稳定性。

  
  

评论区

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