這個問題點非常好。但問的不是很明確。
你肯定是想問socket傳輸數據時,接收方如何知道接收的是字符串還是二進制值。
一是靠事先約定的協議,一般用于控制中的數據傳輸;二是采用標準協議(如HTTP),用于互聯網。
如果沒有事先的約定,你無法確定接收到的數據是文本、圖像還是音頻或視頻。因此,必須事先約定Socket接收數據的格式。約定既可以采用標準協議(如HTTP),也可以用自己定義的協議。
以下通過我之前做的編程實類,分別說明:
事先約定協議:二進制與字符串事先寫好格式,與文件讀/寫一樣。
SOCKET傳輸字符串還是其它數據類型,由你在編程的send()函數中決定,其數據類型為void*,void *為“無類型指針”,void *可以指向任何類型的數據,也就是說可以用字符串,也可以用二進制的int,double等。
TCP/IP,UDP傳輸協議,用socket編程并創建socket關鍵字來實現網絡間的通信。
如下圖是windows的一個socket編程。
從其send,recv函數的格式看,與C/VC++的fread/fwrite()函數非常一致,只是把流換成socket套接字了:
HTTP客戶端請求:要復雜,必須按照HTTP標準協議做。
以客戶端為例。
客戶端發送一個HTTP請求到服務器的請求消息包括以下格式:請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成,下圖給出了請求報文的一般格式。
編程實倒:
從上面看出,編程與windows,linux迥然不同。