TI中文支持网
TI专业的中文技术问题搜集分享网站

c6657无法接收pc传过去的数据

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在使用前需要先建立连接, 在您的代码中没有看到这个过程

谢谢!

 

赞(0)
未经允许不得转载:TI中文支持网 » c6657无法接收pc传过去的数据
分享到: 更多 (0)