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