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)
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
服務器初始化端口49200,它的IP是相同的客戶端(在本地機器上測試) - 192.168.1.179。
我不明白爲什麼連接失敗。原因我在一個不同的函數中以相同的方式執行connect(),只是在這種情況下連接是UDP,並且工作正常。是否因爲我試圖連接到相同的IP?
我對此很新。讓我知道你是否需要更多的代碼部分。
做perror而不是printf - 你會得到一個錯誤的解釋 – pm100
好吧。感謝那! 我收到文件名太長的錯誤。 這是什麼意思? – Manic
@Myst'htons()'在那裏是正確的。請參閱* man *頁面。你有沒有其他想法的理由? – EJP