嵌入式开发者社区
标题:
NDK socket跑飞
[打印本页]
作者:
supeng
时间:
2016-7-5 10:42
标题:
NDK socket跑飞
/****************************************************************************/
/* */
/* 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就不会跑飞,不知道哪里出问题了,希望有人指导下,公司就我自己软件,没有人求助,希望遇到大神
作者:
supeng
时间:
2016-7-5 14:53
求关注,承蒙大神光顾。。。。。。。
作者:
希望缄默
时间:
2016-7-6 08:36
请参考 ndk_2_24_03_35\packages\ti\ndk\tools\servers\datasrv.c
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4