0

この質問は基本的な質問に聞こえるかもしれません。ソケット識別子のみを使用して、ポート、アドレス、バッファサイズなどのソケットの詳細を取得できるcまたはJavaの関数はありますか?

4

2 に答える 2

2

私が利用できるいくつかの最小限の情報を以下に掲載します。

私はJavaについてあまり知りません。ただし、「C」に関する限り、getsockopt関数を使用して、ソケットのバッファーサイズ(sendbufferおよびrecvbuffer)を取得できます。

getocknameは、ソケットがバインドされているIPとポートを取得するのに役立つようです

于 2012-06-01T14:06:57.337 に答える
0

関数のcで、次を受け入れます。

csock = accept(sock, (struct sockaddr*)&csin, &recsize);
  • sockはソケットサーバー(int)です
  • csockはソケットクライアント(int)です
  • recsizeはサイズです
  • csinは、クライアントの詳細を含む構造体です
    • csin.sin_addrはクライアントのアドレスです
    • csin.sin_portはクライアントのポートです

ソケットIDからこれを試してください:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>

f()
{
   int s;
   struct sockaddr_in sa;
   int sa_len;
   .
   .
   .
      /* We must put the length in a variable.              */
   sa_len = sizeof(sa);
      /* Ask getsockname to fill in this socket's local     */
      /* address.                                           */
   if (getsockname(s, &sa, &sa_len) == -1) {
      perror("getsockname() failed");
      return -1;
   }

  /* Print it. The IP address is often zero beacuase    */
  /* sockets are seldom bound to a specific local       */
  /* interface.                                         */
   printf("Local IP address is: %s\n", inet_ntoa(sa.sin_add r));
   printf("Local port is: %d\n", (int) ntohs(sa.sin_port));
   .
   .
   .
}
于 2012-06-01T14:15:57.170 に答える