我正在使用 c 在 TCP 中構建一個反向回顯服務器。
我運行客戶端時出現問題。
當我編譯我的 client.cpp 時,我得到這個錯誤:
error: cannot convert ‘in_addr’ to ‘in_addr_t {aka unsigned int}’ in assignment
serverAddress.sin_addr.s_addr = *((struct in_addr*)host->h_addr);
這是我創建連接的代碼:
serverName = argv[1];
struct sockaddr_in serverAddress;
struct hostent* host;
host = gethostbyname(serverName);
memset(&serverAddress, 0, sizeof(serverAddress));
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = *((struct in_addr*)host->h_addr);
serverAddress.sin_port = htons(serverPort);
memmove(&serverAddress.sin_addr.s_addr, host->h_addr_list[0], host->h_length);
connectValue = connect(clientSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress));
我錯過了什么嗎?
uj5u.com熱心網友回復:
您正在嘗試將整個in_addr結構實體分配給單個整數。這是行不通的。
sockaddr_in::sin_addrmember是一個in_addrstruct,memberin_addr::s_addr是實際的IP地址。只需洗掉s_addr部分以按原樣分配整個in_addr結構:
serverAddress.sin_addr = *((struct in_addr*)host->h_addr);
否則,您可以memcpy()(或在您的示例中memmove())將in_addr結構sin_addr作為一個整體放入成員中。您正在嘗試復制/移動到其s_addr成員,所以只需洗掉:
memcpy(&serverAddress.sin_addr, host->h_addr, host->h_length);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/447346.html
下一篇:HttpURLConnection:為什么指定Expect:100-ContinueHeader時每個塊有5秒延遲?
