CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

socket收发报文时间长,是不是和网络有关系?

楼主senwe()2006-07-03 22:32:26 在 VC/MFC / 网络编程 提问

我用自己的计算机作为客户端和服务器端时,立刻就能收到返回消息  
  在广域网上石沉大海,没有返回消息了……  
  现在运用到局域网上,是由195和198两张网构成的  
  (当服务器端和客户端都在195上的时候能立刻收到返回报文)  
  当服务器端在198(UNIX)上,客户端在195上,大约要50秒才能收到返回的报文  
  而用Delphi写出来的报文收发客户端却能立刻收到返回报文,我就郁闷了  
  请问高手怎样改进?在这样的局域网中能立刻收到返回报文?  
  貌似是send的时间太长……  
     
  以下是报文收发源代码:  
   
  #include   "winsock.h"  
  #pragma   comment(lib,   "wsock32")  
     
  HICON   m_hIcon;  
  SOCKET   m_hSocket;  
  SOCKADDR_IN   m_addr;  
     
  void   CSimpleClientDlg::StartUp()  
  {  
    WSADATA   wsaData;  
    WORD   version   =   MAKEWORD(2,   0);  
    int   ret   =   WSAStartup(version,   &wsaData);  
    if(ret   !=   0)  
      TRACE("Initilize   Error!\n");  
  }  
     
     
  void   CSimpleClientDlg::OnOK()   //按确定发送并接受报文  
  {  
     
  m_addr.sin_family   =   AF_INET;  
  m_addr.sin_addr.S_un.S_addr   =   inet_addr("198.1.0.3");  
  m_addr.sin_port   =   htons(1333);  
     
  int   ret   =   0;  
  int   error   =   0;  
  ret   =   connect(m_hSocket,   (LPSOCKADDR)&m_addr,   sizeof(m_addr));//连接  
  if(ret   ==   SOCKET_ERROR){  
  TRACE("Connect   Error:   %d   \n",   (error   =   WSAGetLastError()));  
  return   ;  
  }  
  CString   str   =   "20060622|183535|1213|";//报文  
  char*   buf   =   str.GetBuffer(0);  
  ret   =   send(m_hSocket,   buf,   str.GetLength(),   0);//发送  
     
  char   buff[256];  
  ret   =   recv(m_hSocket,   buff,   256,   0);//接收  
    buff[ret]   =   '\0';  
  AfxMessageBox(buff);  
  }  
     
  void   CSimpleClientDlg::CleanUp()  
  {  
    if   (WSACleanup()   !=   0){  
      TRACE("UnInitilize   Error:%d\n",   WSAGetLastError());  
    }  
  }  
     
  void   CSimpleClientDlg::OnCancel()    
  {  
    if(m_hSocket   !=   NULL){  
      closesocket(m_hSocket);  
      m_hSocket   =   NULL;  
    }  
    CDialog::OnCancel();  
  }  
     
  void   CSimpleClientDlg::OnDestroy()    
  {  
    CDialog::OnDestroy();  
     
    if(m_hSocket   !=   NULL){  
      closesocket(m_hSocket);  
      m_hSocket   =   NULL;  
    }  
    CleanUp();  
  } 问题点数:50、回复次数:3Top

1 楼bluewinwind(风)回复于 2006-07-04 23:25:04 得分 0

函数写的不够好,下面的两行代码都没有判断机制,自己都不能知道自己是否真正的把数据全部发送出去了,  
  ret   =   send(m_hSocket,   buf,   str.GetLength(),   0);//发送  
  ret   =   recv(m_hSocket,   buff,   256,   0);//接收  
  Top

2 楼senwe()回复于 2006-07-05 00:44:49 得分 0

我用ret取值就是为了判断,这里都省略了……报文也不是这样固定死的……  
  都是主要的socket代码  
  在198网络上的两台PC之间也能实时收发,但是换了一台UNIX的服务器就会有50秒的延时……这就让我纳闷了Top

3 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2006-07-05 08:15:43 得分 0

如果Delphi的代码没问题,那么应该是你VC的代码没写好。Top

相关问题

关键词

得分解答快速导航

  • 帖主:senwe

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo