NDK socket跑飞 - TMS320C6748 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2712|回复: 2
打印 上一主题 下一主题

NDK socket跑飞

[复制链接]

26

主题

52

帖子

1223

积分

金牌会员

Rank: 6Rank: 6

积分
1223
跳转到指定楼层
楼主
发表于 2016-7-5 10:42:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/****************************************************************************/
/*                                                                          */
/*              NDK TCP 通信                                                */
/*                                                                          */
/*              2014年09月22日                                              */
/*                                                                          */
/****************************************************************************/
/* 添加 BIOS 组件 */
var Bios = xdc.useModule('ti.sysbios.BIOS');
/****************************************************************************/
/*                                                                          */
/*              内存配置                                                    */
/*                                                                          */
/****************************************************************************/
/* 添加内存管理组件 */
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
var Memory = xdc.useModule('xdc.runtime.Memory');
var Mmu = xdc.useModule('ti.sysbios.family.c64p.Cache');
/* 创建一个 名为 "systemHeap" 的 HeapMem */
var systemHeapParams = new HeapMem.Params;
systemHeapParams.size = 16 * 1024 *1024;
var systemHeap = HeapMem.create(systemHeapParams);
/* 设置 "systemHeap" 作为默认 Heap */
Memory.defaultHeapInstance = systemHeap;
/* 段分配 */
Program.sectMap["HTML"] = "DDR";
/****************************************************************************/
/*                                                                          */
/*              NDK 配置                                                    */
/*                                                                          */
/****************************************************************************/
var Global = xdc.useModule('ti.ndk.config.Global');
/* 指定服务器守护线程钩子函数 */
Global.networkOpenHook = '&AppOpenHook';
Global.networkCloseHook = '&AppCloseHook';
Global.networkIPAddrHook = '&NetGetIPAddr';
var Ip = xdc.useModule('ti.ndk.config.Ip');
var Tcp = xdc.useModule('ti.ndk.config.Tcp');
/****************************************************************************/
/*                                                                          */
/*              EMAC 配置                                                   */
/*                                                                          */
/****************************************************************************/
// 使用 OMAPL138 EMAC 驱动
xdc.useModule('ti.drv.omapl138.Emac');
/****************************************************************************/
/*                                                                          */
/*              启动配置                                                    */
/*                                                                          */
/****************************************************************************/
/* 启动时调用初始化函数 */
Bios.startupFxns = ['&CacheInit'];
Program.stack = 8192;
Memory.defaultHeapSize = 8192;
Program.heap = 1024;
Mmu.initSize.l1pSize = Mmu.L1Size_32K;
Mmu.initSize.l2Size = Mmu.L2Size_256K;
Ip.socketBufMinRxSize = 2048;
/***********************************************************************************************************/
TCP.c 文件
// NDK
#include <netmain.h>
// C 语言函数库
#include <stdio.h>
#include <console.h>
#include "TCP.h"
char *IPStr = "192.168.1.3";
unsigned int Port = 1025;
SOCKET  listening_socket;
SOCKET  new_connected_socket;
struct sockaddr_in local_ipv4_address;
struct sockaddr_in peer_ipv4_address;
void TcpTask(void)
{
IPN IPAddr;
int optval;
int peer_ipv4_address_length;
    int backlog = 3;
if(!ConStrToIPN(IPStr, &IPAddr))
       printf("Invalid address\n\n");
// IP 地址
mmZeroInit(&local_ipv4_address, sizeof(struct sockaddr_in));
local_ipv4_address.sin_family = AF_INET;
local_ipv4_address.sin_port = htons(Port);
local_ipv4_address.sin_addr.s_addr = IPAddr;
listening_socket = socket(AF_INET, SOCK_STREAMNC, IPPROTO_TCP);
if(listening_socket == INVALID_SOCKET)
{
  printf("failed socket create (%d)\n", fdError());
}
setsockopt(listening_socket, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
if (bind(listening_socket, (struct sockaddr *) &local_ipv4_address, sizeof(local_ipv4_address)) < 0)
{
    printf("Bind to %s:%d failed: %s\n", IPStr, Port, fdError());
    exit(1);
}
printf("Bind is Ok!\n");
if (listen(listening_socket, backlog) < 0)
{
    printf("Listen on %s:%d failed: %s\n", IPStr, Port,fdError());
    fdClose(listening_socket);
    exit(1);
    }
printf("Listen is Ok!\n");
for(;;)
{
  optval ++;
  peer_ipv4_address_length = sizeof(peer_ipv4_address);
  new_connected_socket = accept(listening_socket, (PSA)&peer_ipv4_address, &peer_ipv4_address_length);
  if((int)new_connected_socket < 0)
  {
   if (fdError() == EINTR)
   {
    continue;
   }
   else
   {
    printf("Accept new connection on socket %d failed: %s\n", listening_socket, fdError());
    break;
   }
  }
  else
  {
    char peer_ipv4_address_string[] = "ddd.ddd.ddd.ddd";
    // TODO: implement blacklist/whitelist to permit/deny request.
    //const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
    inet_ntop(AF_INET, &peer_ipv4_address.sin_addr, peer_ipv4_address_string, sizeof(peer_ipv4_address_string));
    printf("Accepted a new connection %d from %s:%d.\n", new_connected_socket, peer_ipv4_address_string, ntohs(peer_ipv4_address.sin_port));
    // step 5, r/w on new_connected_socket
    char message[] = "It works!";
    int n;
    //ssize_t send(int s, const void *buf, size_t len, int flags);
    if ((n = send(new_connected_socket, message, strlen(message), 0)) < 0)
    {
     printf("Send data to client failed: %s\n", fdError());
    }
    else
    {
       printf("Sent %d bytes to client successfully.\n", n);
    }
    //--------------------------------------------------------------
    // step 6, close new_connected_socket
    //--------------------------------------------------------------
    fdClose(new_connected_socket);
  }
   }
   //------------------------------------------------------------------
   // final, close listeninng_socket
   //------------------------------------------------------------------
  fdClose(listening_socket);
}
上面是app.cfg和tcp.c文件
程序老是在accept这里跑飞,当我注释掉bind,listen函数,accept就不会跑飞,不知道哪里出问题了,希望有人指导下,公司就我自己软件,没有人求助,希望遇到大神
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

26

主题

52

帖子

1223

积分

金牌会员

Rank: 6Rank: 6

积分
1223
沙发
 楼主| 发表于 2016-7-5 14:53:58 | 只看该作者
求关注,承蒙大神光顾。。。。。。。
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
板凳
发表于 2016-7-6 08:36:48 | 只看该作者
请参考 ndk_2_24_03_35\packages\ti\ndk\tools\servers\datasrv.c
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-13 03:31 , Processed in 0.035506 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表