3

recvfrom()カスタムユーザー名でログインできる複数のクライアントからUDPパケットを受信するためにCプログラムで使用しています。ユーザーがログインしたら、ユーザー名を固有のクライアント プロセスと組み合わせて、パケットの送信元からユーザーが誰であるかをサーバーが自動的に認識できるようにします。受信したパケットからこの情報を取得するにはどうすればよいrecvfrom()ですか?

4

1 に答える 1

2
#include <iostream>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <cstring>

int main()
{
  int sock = socket(AF_INET, SOCK_DGRAM, 0);

  struct sockaddr_in addr;
  memset(&addr, 0, sizeof(addr));
  addr.sin_family = AF_INET;
  addr.sin_port = htons(1234);
  addr.sin_addr.s_addr = INADDR_ANY;

  bind(sock, reinterpret_cast<struct sockaddr*>(&addr), sizeof(addr));

  char message[256];
  struct sockaddr_in from;
  socklen_t fromLen = sizeof(from);
  recvfrom(sock, message, sizeof(message), 0, reinterpret_cast<struct sockaddr*>(&from), &fromLen);

  char ip[16];
  inet_ntop(AF_INET, &from.sin_addr, ip, sizeof(ip));

  std::cout << ip << ":" << ntohs(from.sin_port) << " - " << message << std::endl;
于 2012-10-28T01:59:05.657 に答える