利用socket进行端口转发时效率低下,如何改进,求大神指教!

wjg20080101 2016-05-28 04:36:00
在使用socket进行端口转发时,转发流程设计如下:
while(1)
{
CString temp;
ZeroMemory(buf,1024);
num = recv(param->socket,buf,1024,0);//num = recv(ss,buf,4096,0);
if(num>0)
{
//信息转发
send(sc,buf,num,0);
}
else if(num==0)
{
break;
}
num = recv(sc,buf,1024,0);
if(num>0)
{
send(param->socket,buf,num,0);
}
else if(num==0)
{
break;
}
}

现在程序可以正常运行,只是转发效率太低,该如何改进??
望大神指教!!!!!!!!!
...全文
283 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjg20080101 2016-06-08
  • 打赏
  • 举报
回复
谢谢,大家的建议都很好!
孤客天涯 2016-05-29
  • 打赏
  • 举报
回复

while(1)
    {
        CString temp;
        ZeroMemory(buf,1024);
       num = recv(param->socket,buf,1024,0);//num = recv(ss,buf,4096,0);
       if(num>0)
       {
               //信息转发
              send(sc,buf,num,0);
        }
         else
       {
                   continue;
       }
    }
这样就可以了,不明白你为什么还搞那么复杂? 另外,建议你搞一个线程专门负责 recv,收到的数据放到你的缓冲链表中,另一个线程专门负责从链表中取出数据send,为什么需要这样,因为你recv和send肯定是不同的链路,你不能保证每次都send顺利(比如通讯断开了),send就会超时,此时你就会影响recv,效率当然低
boylafong 2016-05-29
  • 打赏
  • 举报
回复
一个线程收,一个线程发 收到的数据放到一个缓冲区里,用发的线程发,发完清空存的,当然,缓冲区要比收到的大,一般来说是收到的2倍

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧