你肯定是想问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迥然不同。