0

私のクラスの 1 つで、サーバーとクライアントをプログラムする必要があり、使用するサンプル コードが提供されました。これが私が混乱しているスニペットです:

main()
{
int      sock, sock_current, cc, fromlen, tolen; /*sd is the socket */
int      addrlen;
struct   sockaddr_in sin;
struct   sockaddr_in pin;

/* get an internet domain socket */
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
    perror("socket");
    exit(1);
}

/* complete the socket structure */
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_port = htons(PORT);

/* bind the socket to the port number */
if (bind(sock, (struct sockaddr *) &sin, sizeof(sin)) == -1) {
    perror("bind");
    exit(1);
}

sockaddr_in struct sin の目的は、バインドされたときに sock に関連付けるローカル IP アドレスを格納することだと思います。私はそれで正しいですか?私が正しければ、このコード スニペットはどのようにそれを達成するのでしょうか? 理解できません:

/* complete the socket structure */
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_port = htons(PORT);
4

2 に答える 2

2

このbind関数は、ローカル プロトコル アドレスをソケットに割り当てます。sinここでの目的はbind、割り当てるローカル アドレスを指定することです。

memset(&sin, 0, sizeof(sin));     
sin.sin_family = AF_INET;          //it's an IPv4 address
sin.sin_addr.s_addr = INADDR_ANY;  //wildcard IP address
sin.sin_port = htons(PORT);        //bind to this port number
于 2013-09-24T00:45:04.067 に答える