0
int createclientsock(char * hostname, int port){
struct hostent * hp;
printf("Attempting to create client socket!\n");
memset(&client_addr,'0',sizeof(client_addr));

client_addr.sin_family = AF_INET;
client_addr.sin_port = htons(port);  /* holds the remote port */

  /* If internet "a.d.c.d" address is specified, use inet_addr()
   * to convert it into real address.  If host name is specified,
   * use gethostbyname() to resolve its address */


client_addr.sin_addr.s_addr = inet_addr(hostname);      /* If "a.b.c.d" addr */
if (client_addr.sin_addr.s_addr == -1) {
    hp = gethostbyname(hostname);

    /* Call method to create server socketyname(hostname);*/
    /*printf("host name: %s",hp);*/
    if (hp == NULL) {
        printf("ERROR: Host name %s not found\n", hostname);
        exit(1);
    }
}

/* Create an Address Family (AF) stream socket, implying the use of tcp as the underlying protocol */
client_fd = socket(AF_INET, SOCK_STREAM, 0);
printf("Client_fd: %d\n",client_fd);/*ANDY: it gets to here without printing errors, the client_fd = 3 ...im not sure what that means*/

/* use the sockaddr_in struct in the to variable to  connect */
if (connect(client_fd, (struct sockaddr *)&client_addr, sizeof(client_addr)) < 0) {
  printf("ERROR: could not connect!\n");
  exit(1);
}

return client_fd;

}

接続部分に到達し、最終的にエラー ステートメント「エラー: 接続できませんでした!\n」を出力するまでに長い時間がかかります。

4

1 に答える 1

0

これが実際の問題かどうかはわかりませんが、次の行です。

memset(&client_addr,'0',sizeof(client_addr));

おそらくあなたが望むものではありません。構造体をゼロバイトではなく文字 で埋めます。'0'次のように書くとよいでしょう。

memset(&client_addr,'\0',sizeof(client_addr));

さらに、IP アドレスではなく DNS 名を使用する場合、それをclient_addr構造体にロードすることはありません。hostentポインターを取得しますがh_addr_list、その構造体のフィールドを使用して入力する必要がありますclient_addr.sin_addr.s_addr

于 2013-10-16T00:36:44.820 に答える