当前位置: 技术问答>linux和unix
急啊,这个问题解决不了就死定了
来源: 互联网 发布时间:2015-09-08
本文导语: 哪位大哥有 linux版的CMPP3.0源码啊?2.0,1.2也行。 我这里只有windows 的 VC版的,移植起来累死我了。 谁能告诉我那里可以找到,谢谢啦!!! 如果没有,谁知道vc Socket中的 OnRecive机制在linux上怎么实现? 我初步写...
哪位大哥有 linux版的CMPP3.0源码啊?2.0,1.2也行。
我这里只有windows 的 VC版的,移植起来累死我了。
谁能告诉我那里可以找到,谢谢啦!!!
如果没有,谁知道vc Socket中的 OnRecive机制在linux上怎么实现?
我初步写了以下(源码如下),帮我看看哪里不对,感觉有点不对劲
....
int SocketFd;
fd_set sockfd;
....
...
初始化socket,connect服务器等工作,不细说了
...
FD_ZERO(&sockfd);
FD_SET(SocketFd, &sockfd);
while(MtRecSize)
{
MtRecSize = 0;
if(MtCurLen >= SOCKET_BUF_LEN)
{
perror("Error MtCurlen >= SOCKET_BUF_LEN");
return -1;
}
switch(select(SocketFd + 1, &sockfd, NULL, NULL, NULL))
{
case -1:
perror("error handledn");
break;
case 0:
perror("timeout hanledn");
break;
default:
if(FD_ISSET(SocketFd, &sockfd))
{
if((MtRecSize = recv(SocketFd, SocketBuf + MtCurLen, SOCKET_BUF_LEN - MtCurLen, 0)) == -1)
{
perror("Error read data from ISMG");
return -1;
}
else
{
MtRecSize = MtRecSize + MtCurLen; if(!MtPackageAnalysis(&MtRecSize, &MtCurLen, &MtAllHasBeenProcess, &MtCommandID, &MtMsgLength))
{
perror("Error ...");
return -1;
}
}
}
}
我这里只有windows 的 VC版的,移植起来累死我了。
谁能告诉我那里可以找到,谢谢啦!!!
如果没有,谁知道vc Socket中的 OnRecive机制在linux上怎么实现?
我初步写了以下(源码如下),帮我看看哪里不对,感觉有点不对劲
....
int SocketFd;
fd_set sockfd;
....
...
初始化socket,connect服务器等工作,不细说了
...
FD_ZERO(&sockfd);
FD_SET(SocketFd, &sockfd);
while(MtRecSize)
{
MtRecSize = 0;
if(MtCurLen >= SOCKET_BUF_LEN)
{
perror("Error MtCurlen >= SOCKET_BUF_LEN");
return -1;
}
switch(select(SocketFd + 1, &sockfd, NULL, NULL, NULL))
{
case -1:
perror("error handledn");
break;
case 0:
perror("timeout hanledn");
break;
default:
if(FD_ISSET(SocketFd, &sockfd))
{
if((MtRecSize = recv(SocketFd, SocketBuf + MtCurLen, SOCKET_BUF_LEN - MtCurLen, 0)) == -1)
{
perror("Error read data from ISMG");
return -1;
}
else
{
MtRecSize = MtRecSize + MtCurLen; if(!MtPackageAnalysis(&MtRecSize, &MtCurLen, &MtAllHasBeenProcess, &MtCommandID, &MtMsgLength))
{
perror("Error ...");
return -1;
}
}
}
}
|
FD_ZERO, FD_SET应该在while里面,还有错误没有处理,可能形成死循环
|
OnReceive??你说的是CAsyncSocket的OnReceive成员吧?这个可以用select来取代,设置readfds就可以了
|
select
|
开一个进程也可以,不过比较浪费而已