sendto与recvform接收数据中乱码问题

    最近一直在数据转发问题,在工作的过程中碰到了一个令我非常头痛的问题,当我用函数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));
                                                }
这样做,接收的数据就正常了。
经过多番研究,在网上查证:sendto发送数据的时候,应该把结束符(‘\0')去掉,这样接收的数据才不是乱码。而strcpy的copy机制中就是碰到结束符就会停止copy,所以在comemessage1中没有结束符,这样发送与接收数据就正常了。

至于是不是这个原因,还是有其他的原因,欢迎大家批评指正。


你可能感兴趣的:(c++)