int connect_to_host(char* server_ip, char* server_port)
{
printf("%s\n", "in connect to host");
printf("server_ip in connect_to_host: %s\n", server_ip);
printf("server_port in connect_to_host: %s\n", server_port);
struct sockaddr_in remote_server_addr;
int fdsocket, port;
uint16_t port = atoi(server_port);
socklen_t len = sizeof(remote_server_addr);
fdsocket = socket(AF_INET, SOCK_STREAM, 0);
if(fdsocket < 0) {
printf("%s\n", "socket error");
return -1;
}
memset(&remote_server_addr, 0, sizeof(remote_server_addr));
remote_server_addr.sin_family = AF_INET;
remote_server_addr.sin_addr.s_addr = inet_addr(server_ip);
//inet_pton(AF_INET, server_ip, &remote_server_addr.sin_addr);
remote_server_addr.sin_port = htons(port);
printf("remote server port after htons: %d\n", remote_server_addr.sin_port);
if(connect(fdsocket, (struct sockaddr*)&remote_server_addr, &len) < 0) {
printf("%s\n", "connect error");
return -1;
}
return fdsocket;
}
このブロックの出力:は(も不正な命令を取得:4)
サーバーは、ポート49200を使用して初期化し、それがIPがクライアントと同じであるのですされin connect to host
server_ip in connect_to_host: 192.168.1.179
server_port in connect_to_host: 49200
remote server port after htons: 12480
connect error
[LOGIN:ERROR]
[LOGIN:END]
Illegal instruction: 4
(ローカルマシン上でのテスト) - 192.168.1.179。
私は接続が失敗している理由を理解できません。私は別の関数で同じ方法でconnect()を実行しているので、その場合は接続がUDPであり、正常に動作します。私は同じIPに接続しようとしているからですか?
私はこれにかなり新しいです。コードの他の部分が必要な場合はお知らせください。
printfの代わりにperrorを実行すると、エラーの説明が表示されます。 – pm100
ありがとう! ファイル名が長すぎます。 それはどういう意味ですか? – Manic
@Myst 'htons()'は正しいです。 * man *のページを参照してください。そうでないと思う理由はありますか? – EJP