这个问题困扰我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.   

    struct DataPackage
    {
    CmdType Type;//类型
    UDPPackage Package;//存放图片数据
    char* IP[IP_MAX];//存放IP地址IP_MAX=50
    int IPnum;//记录存放IP的数量
    };
    中,char* IP[IP_MAX];//存放IP地址IP_MAX=50,是指针数组,你没有为每一个指针分配内存
      

  2.   

    ++
    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");
     ...
      

  3.   

    我不同意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
      

  4.   

    我不同意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
      

  5.   

    这样发送法就错了,因为你发送出去一个指针。
    我指的是char* IP[IP_MAX]是指针
      

  6.   


    char * IP = "123123123";不能说"123123123"是分配给IP的内存吧...这只是个指针赋值...
      

  7.   

    身边左右没有个可以交流的人,全靠自己在网上搜。来到CSDN是我最后的希望。感谢各位回复,问题尚未解决。大家的回复让我有了些方向。如果有高人针对我的代码给出改正就更好了,因为马上要到期限了。
    另:我这样初始化
    DataPackage Package;
    memset(&Package,0,sizeof(DataPackage));//初始化
    为啥不行?
      

  8.   

    按照我原先的代码(见上)我把DataPackage
    这个结构调整如下:
    struct DataPackage
    {
    CmdType Type;
    int IPnum;
    UDPPackage Package;
    char* IP[IP_MAX];};
    这样在接收端可以接收到Package.IPnum=1,但DataPackage.IP[0]还是取不到。
    看来果然如各位说的,问题出在char* IP[IP_MAX]上。可怎么解决啊,我正在找办法。
    也希望得到您的帮助。我想就快要结贴了。
      

  9.   

    "123123123"这个是静态常量,在程序运行期一直存在的。char* ip是指向该常量指针。
    大家给你说了这么多,看来你还是没有理解。我理解你发送的IP地址是一个吧,直接这样定义
    struct DataPackage
    {
       ...
       char IP[IP_MAX];
       ...
    }
    这样,你解析看看IP里面有没有你想要的IP地址。你这个char* IP[IP_MAX]是定义了IP_MAX个char*类型的指针。
      

  10.   

    char * Ip = "123123123";
    这句话的意思是定义了一个指针指向常量“123123123”,指针本身并没有分配内存,好好去看看指针吧
      

  11.   

    “char IP[IP_MAX][16];//存放IP地址IP_MAX=50”
    按照楼上一位大神介绍的这个方法吧。只要发送的字符串是确定的,就能格式化的接收。
      

  12.   

    strcpy_s这个函数需要什么头文件,编译不通过,我包含<string.h>也不行
      

  13.   

    我再试试吧,难道用char* IP[IP_MAX]就不行了
      

  14.   


    那就用strcpy吧,编译器用的6.0?
      

  15.   

    to:dickbarry(小怪龙) 
    strcpy试了,编译通过,运行出错。内存读写问题。
      

  16.   

    不行,因为你发送的时候是取地址转换,所以那个位置存的只是4*IP_MAX个字节的指针。不是你的IP的真实内容。楼主<stdio.h>里面有strcpy的
      

  17.   

    用strcpy试过了,编译通过,运行出错。内存读写错误。
      

  18.   

    strcpy(Package.IP[0], "127.0.0.1");这样不行?结构体改了没?
    改成IP[IP_MAX][16]
      

  19.   

    Package.IP[0]="127.0.0.1";
    Package.IP[0]现在指向本机内存中的"127.0.0.1",比如地址是0x01000000。
    然后发送给对方,对方收到0x01000000。可是对方机器的这个地址并不是"127.0.0.1"。
    注意,“127.0.0.1”这些字符,没有出现在你的报文中。
    强烈建议大家不要“发送结构”。不光是大小端,即使c/s的对齐不一样,也会导致双方理解不同。
    定义好报文的格式。自己结构-》序列化-》报文-》传输-》反序列化-》对方结构
      

  20.   

    结构体改了没?
    改成IP[IP_MAX][16]没改。我再试试
      

  21.   

    to:dickbarry(小怪龙)  
    改成IP[IP_MAX][16]
    strcpy试了可以接收。
    to:ndy_w(carpe diem) 
    如您所述,用指针传递IP地址的想法就是错的了。在等一会,如果大家没有其他更好的意见,我就结贴了。
    也希望针对这个问题,给大家有所启示。
    再次感谢诸位的关注与热心回复。