最近一直在数据转发问题,在工作的过程中碰到了一个令我非常头痛的问题,当我用函数sendto发送数据(例如sddaaa)时,可是在接收端有recvfrom接收数据,接收的数据居然是H<>,不明白了,不知道到底哪些地方出现问题了?可是recvfrom返回的接收数据的个数是6,为什么打印出来的是乱码呢?百思不得其解啊!
直接贴代码,想问题:
char *comemessage= new char[256]; int iread1 = recvfrom(PrimaryUDP, comemessage, 256, 0, (sockaddr *)&sender, &dwSender); //这里接收数据正常 comemessage[iread1-1] = '\0'; if(iread1<=0) throw Exception("Recv Message Error\n"); else { printf("forward a Message:%s\n",comemessage); //char comemessage1[256]; //strcpy(comemessage1,comemessage); isend = sendto(PrimaryUDP, (const char *)&comemessage1, strlen(comemessage), 0, (const sockaddr*)&remote, sizeof(remote)); }
这样在接收端recvfrom接收的数据就会是乱码,为什么会是这样呢?
当把代码改为以下,接收数据就正常了,
char *comemessage= new char[256]; int iread1 = recvfrom(PrimaryUDP, comemessage, 256, 0, (sockaddr *)&sender, &dwSender); //这里接收数据正常 comemessage[iread1-1] = '\0'; if(iread1<=0) throw Exception("Recv Message Error\n"); else { printf("forward a Message:%s\n",comemessage); char comemessage1[256]; strcpy(comemessage1,comemessage); //添加了上面两行 isend = sendto(PrimaryUDP, (const char *)&comemessage1, strlen(comemessage), 0, (const sockaddr*)&remote, sizeof(remote)); }这样做,接收的数据就正常了。
至于是不是这个原因,还是有其他的原因,欢迎大家批评指正。