TI工程师们:
麻烦帮忙解决一下http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/62254.aspx的问题,挺头疼的,使用的平台式c6657,那篇帖子写错了,谢谢。
我尝试了<mcsdk_2_01_02_06>\examples\ndk\helloWorld\evmc6657l里的例程,用抓包工具观察数据传输情况,结果发现传过去的数据前面加上了一些乱码,后面是希望传输的内容,协议是UDP;但反馈回来的全是乱码,协议变成了ICMP。不知道是什么情况。发送代码主要部分如下:
s = socket( AF_INET, SOCK_DGRAM, 0 );
if( s < 0 )
{
#ifdef __WIN32__
printf("failed connect (%d)\n",WSAGetLastError());
#else
perror("failed connect");
#endif
goto end;
}
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = 0;
sin.sin_port = htons(SRCPORT);
if ( bind( s, (struct sockaddr *)&sin, sizeof(sin) ) < 0 )
{
#ifdef __WIN32__
printf("failed bind (%d)\n",WSAGetLastError());
#else
perror("failed bind");
#endif
goto end;}
sin.sin_addr.s_addr = tmp1;
sin.sin_port = htons(DSTPORT);
ts = time(0);
packetno = 0;
printf("\nSending packets to %d.%d.%d.%d\n",
tmp1&255, (tmp1>>8)&255, (tmp1>>16)&255, (tmp1>>24)&255 );
pBuf = "hello,world!";
length = strlen(pBuf);
if( sendto( s, pBuf, length, 0, (struct sockaddr *)&sin, sizeof(sin) ) < 0 )
{
#ifdef __WIN32__
printf("send failed (%d)\n",WSAGetLastError());
#else
perror("send failed");
#endif
}
Kevin Cai:
Hi, 您好!
需要按照协议要求的以太网报文格式填写发送数据包(目的/源IP, 目的/源MAC).这样PC才能正确解析收到的报文。
在您的代码中,源IP没有正确填写sin.sin_addr.s_addr = 0;
另外socket在使用前需要先建立连接, 在您的代码中没有看到这个过程
谢谢!