OMOSSocket 类表示用于在 Rational® Rhapsody® 与受检测应用程序之间传递数据的套接字。
OMOSSocket 通常用于动画用途,但还可以用于其他连接,前提是您必须提供主机名和端口号。OMOSSocket 表示连接的客户机端,并假定网络中的某个地方有一台服务器正在侦听该连接。您可以修改 OMOSSocket 类的定义,以便从相关位置除去 _OMINSTRUMENT 宏定义,从而提供不受检测配置的套接字实现。另外,您可能还需要在 MakeFileContent 特性内将 SOCK_LIB 宏的定义修改为类似于用于跟踪和动画的宏定义。
如果动画会话似乎被挂起,那么原因可能是在 Rational Rhapsody 与应用程序之间传递的大量消息导致套接字的内部缓冲区被填满,这可能会导致 Rational Rhapsody 与应用程序之间的通信出现严重延迟。此问题的解决方案是,增大套接字内部缓冲区的大小(缺省情况下,此大小为 8 KB)。例如,在 Windows NT 实现中,您可以向 NTSocket 的 Create() 函数添加以下代码:
int NTSocket::Create(
const char* SocketAddress /*= NULL*/,
unsigned int nSocketPort /*= 0*/)
{
...
if ((theSock = socket(AF_INET, SOCK_STREAM, proto))
== INVALID_SOCKET)
{
NOTIFY_TO_ERROR("Could not create socket\n");
theSock = 0;
return 0;
}
int internalBufferSizes = 64 * 1024; // 64k
setsockopt(theSock, SOL_SOCKET, SO_RCVBUF,
(char*) &internalBufferSizes, sizeof(int));
setsockopt(theSock, SOL_SOCKET, SO_SNDBUF,
(char*) &internalBufferSizes, sizeof(int));
...
}