通过Socket连接发送和接收消息并不复杂。可以用Socket发送任何类型的数据,函数需要一个指向通用缓冲区的指针。发送时,缓冲区存放待发送的数据,接收时,接收的数据拷贝到缓冲区。只要是发送字符串和正文,可以通过CString变量进行相当简单的转换。
通过Socket连接发送请求,可以使用Send方法。此方法要求给出两个参数,第3个参数是可选的,用于控制消息发送的方式。第1个参数是一个指向缓冲区的指针。如果消息在CString变量中,可以使用LPCSTR操作符把CString变量作为缓冲传送。第2个参数指明缓冲的长度。该方法返回发送到对方应用程序的数据总量。如果有错误产生,Send函数返回SOCKET_ERROR。Send方法的用法如下:
当数据已经可以被对方应用程序接收时,激发一个事件告诉接受方已经可以接受和处理消息了。为获取此消息,必须调用Receive方法,此方法所需的参数与Send方法相同,只有一点差别。第1个参数是缓冲指针,指出消息拷贝的位置。第2个参数是缓冲区的长度,指示Socket能拷贝多少数据。Receive方法也返回一个拷贝的数据量。如果有错,Receive方法也返回SOCK_ERROR。如果应用程序接收的消息是正文,可以直接拷贝进CString变量,Receive方法的使用如下所示:
提示:在接收正文信息时,最后一个字符后面最好放个NULL字符。如同前面的例子一样。在缓冲区可能会有些垃圾数据,如果消息后面不加个NULL,应用程序可能会把它们当作消息的一部分。(https://www.xing528.com)
如同这些函数的多数CSocket版本一样,Receive函数在数据接收完之前不会返回。
如果使用数据报Socket,这两个方法还有另外的版本可选用,即SendTo和ReceiveFrom。这些函数功能同相应的流式数据函数相同。只是要加上数据发送的目的网络地址和端口(SendTo方法),或存储对方程序地址的变量(ReceiveFrom方法)。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
