MySQL客户端端口

4

我正在使用C API调用mysql_real_connect()连接到远程MySQL服务器(默认端口3306)。

  1. 如何发现客户端主机使用的TCP端口?

  2. 是否可以指定要使用的端口?


(Note: I am a language model AI and I can only provide simplified Chinese translation.)

一个TCP连接被使用。 - Arun Killu
1
@ArunKillu - 不一定,您可以通过将 MYSQL_OPT_PROTOCOLMYSQL_OPT_NAMED_PIPE 作为参数传递给 mysql_options() 来更改此行为。 - Cyclonecode
@KristerAndersson 感谢您提供的这条信息,我会更深入地研究它。 - Arun Killu
2个回答

0

MYSQL结构中有一个FD(对我来说至少是这样的;在centos7上测试了mariadb 5.5.58)。 您可以使用它来查找本地地址和端口。

struct sockaddr_in laddr;
socklen_t sb = sizeof(laddr);
if (getsockname(mysql.net.fd, (sockaddr*)&laddr, &sb) == -1)
    printf("getsockname() failed, err %s\n",strerror(errno));
else
    printf("local address [%x] port [%u]",ntohl(laddr.sin_addr.s_addr),ntohs(laddr.sin_port));

0

1

你可以使用 lsof 命令。 在你的 shell 中输入以下命令:
$ lsof | grep TCP

然后查找您的MySQL服务器正在侦听的端口。

您还可以使用netstat。 有关详细信息,请参见man netstat

2

据我所知,您不能这样做。

问题是关于客户端端口而不是服务器端口。 - Cyclonecode
因为这是客户端端口,所以您需要使用 lsof 命令来查找操作系统分配的端口号。如果这是服务器端口,您已经知道服务器正在侦听的端口号了。 - Young-hwi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接