Symbian OS sockets API
2010-07-22 01:42:00 来源:WEB开发网接收数据
使用无连接的sockets
下面的函数,是RSocket提供的用来接收无连接的socket的接入数据的。
void RecvFrom(TDes8& aDesc, TSockAddr& anAddr, TUint flags, TRequestStatus& aStatus); void RecvFrom(TDes8& aDesc, TSockAddr& anAddr, TUint flags, TRequestStatus& aStatus, TSockXfrLength& aLen);
如果应用程序使用的是无连接的socket,那么需要使用RSocket::RecvFrom()这个这个方法来读取从另外一个远程主机发送过来的数据。
该函数的第一个参数是一个字符串,是用来保存接收数据的。
调用该函数的程序,会在一个完整的数据报接收完成的时候,得到相应的通知。接收数据的长度,就是接收字符串的长度。如果接收数据报的长度要比字符串的最大长度更长,那么接收数据的末尾将被截去。
该函书的第二个参数是要进行接收操作的远程主机的地址。这个地址需要是一个根据socket打开方式定义的协议格式相匹配的地址。例如,如果打开socket的时候定义的是TCP/IP协议,那么这个地址需要是一个TInetAddr类型的变量。
我们会发现,这个函数有两个版本的重载,他们都进行了同样的操作,方式也一样。唯一不同的是,第二个函数可以将接收数据的长度,显式地返回给调用者。
还有一点,一个单独的socket在任何一个时间内,都只有一个状态为等待中的接收操作。
上面的方法,只能用于无连接(数据报)类型的socket连接。
使用连接的sockets
下面的函数是RSocket提供的用来从已经连接的socket中读取数据的函数原形。
void Recv(TDes8& aDesc, TUint flags, TRequestStatus& aStatus); void Recv(TDes8& aDesc, TUint flags, TRequestStatus& aStatus,TSockXfrLength& aLen); void RecvOneOrMore(TDes8& aDesc, TUint flags, TRequestStatus& aStatus, TSockXfrLength& aLen);
如果应用程序使用的是已连接的socket,那么应该使用上面的函数来进行远程主机的数据接收工作。
和前面的无连接socket类似,这些接收函数的第一个参数,仍然是接收数据要保存的目标字符串变量。
Recv()函数会在目标字符串变量被填满或者连接断开的时候完成。在该函数完成调用的时候,读取数据的长度就是字符串的长度,除非在没有读取任何数据连接就断开了。
更多精彩
赞助商链接