テスト目的で、サービスをTCPポートに接続したいと思います。次に、このポートに電話をかけ、サービスが機能することを確認して、シャットダウンします。固定ポート番号を使用できないため、このようなポート番号を生成する方法を見つける必要があります。テストは並行して実行される可能性があります。出来ますか?
2777 次
2 に答える
6
これが私のやり方です:
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main() {
struct sockaddr_in addr;
socklen_t len = sizeof(addr);
addr.sin_port = 0;
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
perror("socket()");
return -1;
}
if (bind(sock, (struct sockaddr*) &addr, sizeof(addr)) != 0) {
perror("bind()");
return -1;
}
if (getsockname(sock, (struct sockaddr*) &addr, &len) != 0) {
perror("getsockname()");
return -1;
}
printf("%d\n", addr.sin_port);
return 0;
}
次に、それをコンパイルして実行します。
cc -o reserve reserve.c && ./reserve
また、バインドに使用できるポート番号を出力します。
ツールのフルバージョンをGithubで公開しました:https ://github.com/yegor256/random-tcp-port
于 2012-11-09T12:27:29.377 に答える
2
バインド時にポートゼロを指定するだけです。次に、を使用getsockname()
して割り当てられたポートを確認します。これにより、リッスンしているポートを別の方法でクライアントに伝えることができます。めったに役に立ちません。
于 2012-11-09T20:45:32.000 に答える