0

这个问题听起来很基础。c 或 Java 中是否有任何函数可以让我仅使用套接字标识符来获取套接字详细信息,例如端口、地址、缓冲区大小?

4

2 回答 2

2

下面发布了一些与我有关的最少信息。

我对Java了解不多。但就'C'而言,您可以使用getsockopt函数来获取套接字的缓冲区大小(发送缓冲区和接收缓冲区)。

看来getsockname可以帮助您获取套接字绑定到的 ip 和端口。

于 2012-06-01T14:06:57.337 回答
0

在函数accept的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 回答