各位大侠,救啊基于连接的UDP客户端,能发却收不到服务器发回的ack!解决办法
发布时间:2010-05-30 00:58:30 文章来源:www.iduyao.cn 采编人员:星星草
各位大侠,急救啊!!基于连接的UDP客户端,能发却收不到服务器发回的ack!
问题陈述:
1. 我在windows mobile 6.0 平台上做了个基于连接的UDP客服端,然后向PC上一个UDP服务器发信息,可以发信息到服务器上,但收不到服务器回发的ack.
2. 我做的客服端是绑定了端口18587,但我在服务器的上用抓包工具抓到手机发过来的数据包时,端口号却不是18587,而且会变动!
3. 有没有抓手机的UDP包的方法?
下面的源码:
[code=C/C++][/code]
// udp_client_connect.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <connmgr.h>
#include <connmgr_proxy.h>
#include <Winsock2.h>
#include <stdio.h>
#include <windows.h>
#include <iostream>
#pragma comment (lib,"ws2.lib")
#pragma comment( lib, "cellcore.lib" )
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
//建立GPRS连接
GUID IID_DestNetInternet = {0x436ef144, 0xb4fb, 0x4863, 0xa0, 0x41, 0x8f, 0x90, 0x5a, 0x62, 0xc5, 0x72};
CONNMGR_CONNECTIONINFO pConnInfo;
memset(&pConnInfo, 0, sizeof(CONNMGR_CONNECTIONINFO));
pConnInfo.cbSize=sizeof(CONNMGR_CONNECTIONINFO);
pConnInfo.dwParams=CONNMGR_PARAM_GUIDDESTNET;
pConnInfo.dwFlags=CONNMGR_FLAG_PROXY_WAP | CONNMGR_FLAG_PROXY_HTTP | CONNMGR_FLAG_PROXY_SOCKS4 | CONNMGR_FLAG_PROXY_SOCKS5;
pConnInfo.dwPriority=CONNMGR_PRIORITY_USERINTERACTIVE;
pConnInfo.bExclusive=FALSE;
pConnInfo.bDisabled=FALSE;
// pConnInfo.hWnd=m_hWnd;
pConnInfo.guidDestNet= IID_DestNetInternet;
DWORD pdwStatus=0;
HANDLE m_wapHandle;
HRESULT hr=ConnMgrEstablishConnectionSync(&pConnInfo, &m_wapHandle, 10000, &pdwStatus);
printf("ConnMgrEstablishConnectionSync = %d\n",hr);
//1.启动SOCKET库,版本为1.0
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested=MAKEWORD(1,1);
err=WSAStartup(wVersionRequested,&wsaData);
if(err!=0)
{
return 0;
}
if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
{
WSACleanup();
return 0;
}
//创建socket
SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0); //AF_INET: internetwork: UDP, TCP, etc; SOCK_DGRAM说明是UDP类型
SOCKADDR_IN addrSrv,addrLocal;
//用于循环控制
int flag = 1;
while(flag)
{
char serv_addr[100];
cout << "please input the severaddr : "<<endl;
cin >> serv_addr;
cout<<endl;
addrSrv.sin_addr.S_un.S_addr =inet_addr(serv_addr); //inet_addr()将IP地址从点数格式转换成无符号长整型
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(18586);
addrLocal.sin_family=AF_INET; //bind to a local port
addrLocal.sin_addr.s_addr=htonl(INADDR_ANY);
addrLocal.sin_port=htons(18587);
//绑定端口
if(bind(sockClient,(struct sockaddr*)&addrLocal,sizeof(struct sockaddr))==-1)
{
printf("error!");
}
//建立连接
if(connect(sockClient,(struct sockaddr*)&addrSrv,sizeof(addrSrv))==-1)
{
printf("error!");
}
struct TRAN_PACKET
{
char buffer[60];
};
struct TRAN_PACKET tran_packet = {{0x00, 0x3c, 0x00 ,0x08,0xDB, 0x22,0x4e, 0x4f, 0x03, 0x00, 0x80, 0x00, 0x41, 0x32, 0x31, 0x33, 0x30, 0x36, 0x38, 0x39, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x33, 0x35, 0x36, 0x37, 0x38, 0x36, 0x30, 0x31, 0x30, 0x32, 0x39, 0x37, 0x37, 0x32, 0x33, 0x00, 0x34, 0x36, 0x30, 0x30, 0x32, 0x31, 0x31, 0x36, 0x39, 0x31, 0x31, 0x38, 0x39, 0x38, 0x31}};
//发送数据给服务端
int send_data_len = send(sockClient,(char*) &tran_packet,(int)sizeof(struct TRAN_PACKET),0);
//输出发送的数据
cout << "向服务器端发送数据如下:" <<endl;
for(int i=0;i<send_data_len;i++)
{
printf("0x%.2X ",tran_packet.buffer[i]);
}
cout<<endl <<"send_end"<<endl;
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
wince手持设备串口通信问题(在线等回复)
手持设备上的串口COM4能用函数CreatFile()打开(以同步模式),但用WriteFile()发送数据时,里边参数显...
-
windows mobile 移动开发用的是什么语言啊
windows mobile 移动开发用的是什么语言啊 我是学c/c++的想做 windows mobile 方面的...
-
Gps获得的经纬度不准确
通过GPSGetPosition获得到数据
纬度比实际纬度大0.002度左右
经度比实际经度小0.004度左右
测的位置与实...
-
wp7 利用ZipOutputStream压缩.txt文件问题
//压缩
private static void CreateZipFile(string filesPath, string zipFi...
-
WP开发工具安装问题
因为一些其他的原因,我暂时我只能工作在XP的环境下,但是我正在WP开发的路中。
我在XP上安装WP开发工具的时候...
-
VS2008的wince 6.0模拟器怎么和PC端的socket连接,需要怎么设置模拟器,谢谢
VS2008的wince 6.0模拟器怎么和PC端的socket连接,需要怎...
-
Windows Phone Express
我安装了Microsoft Virtual Studio 2010 for Express Windows Phone,Windows Phone项目成功创建,但是模拟器...
-
关于fmodce.dll资源释放的问题
请教各位: 使用C#在Mobile上用fmodce.dll进行声音文件的播放,播放结束调用:
bool isSuccess = fmod_S...
-
wp7 如何把手机联系人的电话号码写到一个.txt文件里面?
wp7 如何把手机联系人的电话号码写到一个.txt文件里面?
------解决方案---...
-
为什么C#修改注册表没有权限 如何获得权限?
C# code
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\MICROSOFT...