这个问题困扰我2天了,希望大家帮帮忙。问题解决了还可追加分数。
1)数据报的结构,参考了一些代码,其中char* IP[IP_MAX]和int IPnum是我后加的
enum CmdType{CT_Link,CT_Exit,CT_Look,CT_Link_CF,CT_Exit_CF,CT_Look_CF,CT_CMD_CF,CT_Show,CT_Message,CT_WM};
struct UDPPackage
{
int iIndex;
DWORD JpegSize;
int buffersize;
bool bFinish;
int PageCount;
char buffer[65000];//
};
struct DataPackage
{
CmdType Type;//类型
UDPPackage Package;//存放图片数据
char* IP[IP_MAX];//存放IP地址IP_MAX=50
int IPnum;//记录存放IP的数量
};
2)发送端的发送
DataPackage Package;
memset(&Package,0,sizeof(DataPackage));//初始化
Package.Type=CT_Link;
Package.IP[0]="127.0.0.1";
Package.IPnum=1
sendto(m_Socket,(char*)&Package,sizeof(DataPackage),0,(sockaddr*)&m_severaddr,sizeof(m_severaddr)); 3)接收端的接收
BYTE *buffer= new BYTE[MAX_BUFF];
int factsize =sizeof(sockaddr);
int ret = recvfrom(m_Socket,(char*)buffer,MAX_BUFF,0,(sockaddr*)&m_revaddr,&factsize);
if(ret!=-1)
{
DataPackage Package;
memcpy(&Package,buffer,sizeof(DataPackage)); ......
Package.IP[0]//这里发现没有数据
Package.IPnum//这里发现没有数据
..........
}
4)只想在数据报中能传递IP地址,有什么办法啊
1)数据报的结构,参考了一些代码,其中char* IP[IP_MAX]和int IPnum是我后加的
enum CmdType{CT_Link,CT_Exit,CT_Look,CT_Link_CF,CT_Exit_CF,CT_Look_CF,CT_CMD_CF,CT_Show,CT_Message,CT_WM};
struct UDPPackage
{
int iIndex;
DWORD JpegSize;
int buffersize;
bool bFinish;
int PageCount;
char buffer[65000];//
};
struct DataPackage
{
CmdType Type;//类型
UDPPackage Package;//存放图片数据
char* IP[IP_MAX];//存放IP地址IP_MAX=50
int IPnum;//记录存放IP的数量
};
2)发送端的发送
DataPackage Package;
memset(&Package,0,sizeof(DataPackage));//初始化
Package.Type=CT_Link;
Package.IP[0]="127.0.0.1";
Package.IPnum=1
sendto(m_Socket,(char*)&Package,sizeof(DataPackage),0,(sockaddr*)&m_severaddr,sizeof(m_severaddr)); 3)接收端的接收
BYTE *buffer= new BYTE[MAX_BUFF];
int factsize =sizeof(sockaddr);
int ret = recvfrom(m_Socket,(char*)buffer,MAX_BUFF,0,(sockaddr*)&m_revaddr,&factsize);
if(ret!=-1)
{
DataPackage Package;
memcpy(&Package,buffer,sizeof(DataPackage)); ......
Package.IP[0]//这里发现没有数据
Package.IPnum//这里发现没有数据
..........
}
4)只想在数据报中能传递IP地址,有什么办法啊
解决方案 »
- VC检出内存泄露的疑问,请帮忙分析解决,谢谢:)
- 关于VS2008 老式与旧式窗口风格的问题!!
- 请问如何根据图片的大小决定view的大小?急
- 谁能给出一些ADSL计时的例子
- 怎么把我自己的程序生成的图形文件保存成XML文件
- yzx110谢谢你回答我的问题,请进来接分
- API拦截的问题!有个东西不明白!
- edit多行显示,如何判断光标位置是否在行首?
- 请问加上什么头文件,可以调用函数:AfxFullPath,AfxGetFileTitle?
- MFC activex控件属性的持久性问题
- Microsoft Communication Controls Version 6.0 不支持此接口
- SQL2005插入和修改记录时发生RUNtime的错误,请帮忙分析下原因,代码如下
{
CmdType Type;//类型
UDPPackage Package;//存放图片数据
char* IP[IP_MAX];//存放IP地址IP_MAX=50
int IPnum;//记录存放IP的数量
};
中,char* IP[IP_MAX];//存放IP地址IP_MAX=50,是指针数组,你没有为每一个指针分配内存
struct DataPackage
{
CmdType Type;//类型
UDPPackage Package;//存放图片数据
char IP[IP_MAX][16];//存放IP地址IP_MAX=50
int IPnum;//记录存放IP的数量
};2)发送端的发送
...
strcpy_s(Package.IP[0], 16, "127.0.0.1");
...
char * IP = "123123123"; //你们说这种方法不可以分配内存?不对吧但是
sendto(m_Socket,(char*)&Package,sizeof(DataPackage),0,(sockaddr*)&m_severaddr,sizeof(m_severaddr)); 这样送法就错了,因为你发送出去一个指针。char IP[IP_MAX][IPnum]; //IPnum要附值,不然就mallocc
char * IP = "123123123"; //你们说这种方法不可以分配内存?不对吧但是
sendto(m_Socket,(char*)&Package,sizeof(DataPackage),0,(sockaddr*)&m_severaddr,sizeof(m_severaddr)); 这样送法就错了,因为你发送出去一个指针。char IP[IP_MAX][IPnum]; //IPnum要附值,不然就mallocc
我指的是char* IP[IP_MAX]是指针
char * IP = "123123123";不能说"123123123"是分配给IP的内存吧...这只是个指针赋值...
另:我这样初始化
DataPackage Package;
memset(&Package,0,sizeof(DataPackage));//初始化
为啥不行?
这个结构调整如下:
struct DataPackage
{
CmdType Type;
int IPnum;
UDPPackage Package;
char* IP[IP_MAX];};
这样在接收端可以接收到Package.IPnum=1,但DataPackage.IP[0]还是取不到。
看来果然如各位说的,问题出在char* IP[IP_MAX]上。可怎么解决啊,我正在找办法。
也希望得到您的帮助。我想就快要结贴了。
大家给你说了这么多,看来你还是没有理解。我理解你发送的IP地址是一个吧,直接这样定义
struct DataPackage
{
...
char IP[IP_MAX];
...
}
这样,你解析看看IP里面有没有你想要的IP地址。你这个char* IP[IP_MAX]是定义了IP_MAX个char*类型的指针。
这句话的意思是定义了一个指针指向常量“123123123”,指针本身并没有分配内存,好好去看看指针吧
按照楼上一位大神介绍的这个方法吧。只要发送的字符串是确定的,就能格式化的接收。
那就用strcpy吧,编译器用的6.0?
strcpy试了,编译通过,运行出错。内存读写问题。
改成IP[IP_MAX][16]
Package.IP[0]现在指向本机内存中的"127.0.0.1",比如地址是0x01000000。
然后发送给对方,对方收到0x01000000。可是对方机器的这个地址并不是"127.0.0.1"。
注意,“127.0.0.1”这些字符,没有出现在你的报文中。
强烈建议大家不要“发送结构”。不光是大小端,即使c/s的对齐不一样,也会导致双方理解不同。
定义好报文的格式。自己结构-》序列化-》报文-》传输-》反序列化-》对方结构
改成IP[IP_MAX][16]没改。我再试试
改成IP[IP_MAX][16]
strcpy试了可以接收。
to:ndy_w(carpe diem)
如您所述,用指针传递IP地址的想法就是错的了。在等一会,如果大家没有其他更好的意见,我就结贴了。
也希望针对这个问题,给大家有所启示。
再次感谢诸位的关注与热心回复。