3872|7

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

socket编程 connect总返回0 [复制链接]

在Wince做的Socket程序,客户端首先进行GPRS拨号,成功后在线程中完成connect,但是connect的地址无论什么都返回0,请教一下 为什么?
这个客户端程序移植到VC下则测试 能用。

最新回复

重新试了,gprs可以连通,连接的IP地址处的远端主机上服务器端如果不运行,用wireshark还可以抓到客户端连接的TCP的SYN连接数据包,但是没有应答 在客户端的connect感觉发送完SYN包后,直接继续执行,没有阻塞等待返回结果, 但是 程序用默认的阻塞方式,没有设置非阻塞方式...请教这个的原因?  详情 回复 发表于 2010-4-22 13:29
点赞 关注

回复
举报

64

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
贴一下代码。
否则只能凭空猜测。
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

8oisGwtRKz4l8Gdln4uI4r98



pVuibsLaqrpKNbNIG0ngVIFf
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 
代码如下:

  1. //成员变量
  2.         CString m_strLastError;
  3.         HANDLE m_hRecvThread;
  4.         SOCKET m_hClientSocket;

  5. //OnInitDialg中
  6.         WORD wVersionRequested;
  7.         WSADATA wsaData;
  8.         int err;
  9.        
  10.         wVersionRequested = MAKEWORD( 2, 2 );
  11.        
  12.         err = WSAStartup( wVersionRequested, &wsaData );
  13.         if ( err != 0 )
  14.         {
  15.                 m_strLastError.Format(_T("WSAStartup错误,错误原因:%d"),WSAGetLastError());
  16.                 AfxMessageBox(m_strLastError);

  17.                 return FALSE;
  18.         }

  19.        
  20.         if ( LOBYTE( wsaData.wVersion ) != 2 ||
  21.         HIBYTE( wsaData.wVersion ) != 2 ) {
  22.                 WSACleanup( );
  23.                 AfxMessageBox(m_strLastError);

  24.                 return FALSE;
  25.         }

复制代码

初始化完毕后,点击按钮 启动GPRS和SOCKET

  1. void CTestSocketDlg::OnButton1()
  2. {

  3.         if (!CERasDial(_T("gprs"),_T("*99***1#"),_T("*"),_T(""),_T(""),_T("")))
  4.         {   

  5.                 m_strLastError.Format(_T("当前信号弱,GPRS拨号失败"));

  6.                 AfxMessageBox(m_strLastError);;
  7.         }else
  8.         StartSocketService(1);
  9. }

  10. BOOL CTestSocketDlg::StartSocketService( UINT nSocketType)
  11. {
  12.           m_hClientSocket = socket(AF_INET,SOCK_STREAM,0);
  13.         if (m_hClientSocket == INVALID_SOCKET)
  14.         {
  15.                 m_strLastError.Format(_T("创建连接socket发生错误,错误信息:%d"),WSAGetLastError());
  16.                  
  17.                 return FALSE;
  18.         }


  19.   m_hRecvThread = CreateThread(NULL,0,RecvThread,this,0,NULL);
  20.   if (m_hRecvThread == NULL)
  21.   {
  22.         closesocket(m_hClientSocket);
  23.         m_hClientSocket = NULL;

  24.         m_strLastError.Format(_T("创建数据接收线程错误,错误原因:%d"),GetLastError());
  25.         return FALSE;
  26.   }

  27.   return TRUE;
  28. }
复制代码

线程函数


  1. DWORD WINAPI CTestSocketDlg::RecvThread(LPVOID lpParameter)
  2. {
  3.         TRACE(_T("接收数据线程启动 \n"));

  4.         CTestSocketDlg *pClientSocket = (CTestSocketDlg *)lpParameter;

  5.         sockaddr_in m_SAI;

  6.         m_SAI.sin_addr.S_un.S_addr = inet_addr("57.95.26.32");
  7.         m_SAI.sin_family = AF_INET;
  8.         m_SAI.sin_port = htons(5080);

  9.         TRACE(_T("SOCKET Handle:%d in Thread \n"),pClientSocket->m_hClientSocket);
  10.         int nRet = connect(pClientSocket->m_hClientSocket,(sockaddr *)&m_SAI,sizeof(sockaddr));
  11.         if (nRet == SOCKET_ERROR)
  12.         {

  13.                 return -1;
  14.        
  15.         }

  16.         return 0;
  17. }
复制代码

 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(初级)

5
 
这个你确认GPRS已经拨号成功了吗?我不知道你这个CERasDial()是不是自己封装了。如果是ce下的api应该是RasDial,但是这个函数有同步模式和异步模式两种。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 4 楼 xuefeng_baggio 的回复:
这个你确认GPRS已经拨号成功了吗?我不知道你这个CERasDial()是不是自己封装了。如果是ce下的api应该是RasDial,但是这个函数有同步模式和异步模式两种。

我确定 拨号已经成功..
之前这个 程序还好用,后来对系统进行结构 重写,但是 socket代码没动,然后就不好用了..
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 
我把GPRS连接代码注释掉,然后 进行直接连接connect不知道 为什么还是返回0
请问 怎么样 检测GPRS连接成功?
 
 
 

回复

63

帖子

2

TA的资源

一粒金砂(中级)

8
 
重新试了,gprs可以连通,连接的IP地址处的远端主机上服务器端如果不运行,用wireshark还可以抓到客户端连接的TCP的SYN连接数据包,但是没有应答
在客户端的connect感觉发送完SYN包后,直接继续执行,没有阻塞等待返回结果,
但是 程序用默认的阻塞方式,没有设置非阻塞方式...请教这个的原因?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表