2015-08-31 75 views
-1

我只想通過套接字發送一個整數,但似乎sendto套接字命令只接受一個字符。我正在努力將我的int更改爲一個字符通過套接字發送它。 request_number是我想要更改爲request_char的char的int。在TCP套接字連接上發送int值

我無法訪問atoi/atof等命令,所以我在這裏嘗試了sprintf。但是,當我運行它什麼也不做,甚至不打印出價值。我的sprintf命令有什麼問題?或者有什麼其他的方式來避免這種轉換時發送一個INT套接字的TCP套接字?

int request_number= 100; 
char request_char[request_number]; 

    sprintf(request_char, "%i", request_number); 
    send(tcp_new_socket , request_char , strlen(request_char) , 0); 

此外,當我收到我的套接字的另一端的值,我怎麼把它變回int?相同類型的sprintf命令?預先感謝您的幫助。讓我知道是否需要詳細說明任何事情。

+0

您需要先設計一個協議,然後再實施一個協議。看看TCP上分層的其他協議(如HTTP,IRC或SMTP)的規範,看看應該如何完成。 –

回答

-1

發送到網絡的任何東西都是以字節爲單位的...所以無符號字節是字符,所以你可以看到發送API是字符數組。

在另一邊,您將收到現在基於協議字節[由您定義] 當您收到您需要從字節構建整型

希望這有助於

+0

爲什麼downvote?請解釋我提供了爲什麼網絡api是字節數組以及接收方應該做些什麼的細節.. –

0

所有我想要做的是通過套接字發送一個整數,但似乎sendto套接字命令只接受一個字符。

錯誤。它接受char *

我正在努力改變我的int到一個字符通過套接字發送它。

當然,你是。 int不適合char,你不需要這樣做。只需提供int的地址並將其投射到char *即可。

int request_number= 100; 
char request_char[request_number]; 

sprintf(request_char, "%i", request_number); 
send(tcp_new_socket , request_char , strlen(request_char) , 0); 

此代碼不符合您給出的描述。這裏沒有任何東西可以將int轉換成char。有代碼將它轉換爲一個char[]數組,以ASCII形式發送,但這並不是你說的你想要做的。僅發送二進制的int

int request_number = 100; 
send(tcp_new_socket , (char*)&request_number , sizeof request_number, 0); 

並且相反地在接收器處。然而,你真的應該發送int網絡字節順序:

int request_number = htons(100); 
send(tcp_new_socket , (char*)&request_number , sizeof request_number, 0); 

,並使用ntohs()在接收器把它放回主機順序。

0

您不需要執行轉換。套接字可以發送任何類型的數據。只需將int地址轉換爲char *併爲套接字指定指針和字節數。