⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tsknetwork.c

📁 上传源码文件为配合SeedVPM642板视频开发
💻 C
字号:
#include <std.h>
#include <tsk.h>
#include <stdio.h>
#include <csl.h>
#include <csl_cache.h>
#include <csl_dat.h>
#include <scom.h>
#include <utl.h>
#include <ialg.h>
#include <csl_gpio.h>

#include "appmain.h"
#include "..\ndk\inc\netmain.h"
IPN IpDecodeDefault = 0;

Uint32 StreamWaddr = 0;
char *ServerPAddr = "192.168.253.111";   //服务器ip地址
char *Defaultmessage ="This is a test of the emergency broadcasting system";

#define		BUFLEN	0x4000

extern int  linkstatus;
#pragma DATA_SECTION(rxdata_stream,   ".user_data_ext")
#pragma DATA_ALIGN( rxdata_stream,   128)
unsigned char rxdata_stream[BUFLEN];

//
void tskNetworkTx()
{
    SOCKET   slisten = INVALID_SOCKET;
    struct   sockaddr_in sin1;
    SCOM_Handle   hs_Netok;				
	int hr,Tmp, rxlen;
	unsigned char *Databuf;
	
    /*打开SCOM模块*/
    hs_Netok   = SCOM_open("NETOK");
	
    if( !hs_Netok )
    {
        for(;;);
    }
	
	// 等待所有的初始化完成    
	TSK_sleep(500);
    SCOM_getMsg( hs_Netok, SYS_FOREVER );
	
    // Allocate the file environment for this task
    fdOpenSession( TaskSelf() );

    // Create the main TCP listen socket
    slisten = socket(AF_INET, SOCK_STREAMNC, IPPROTO_TCP);
    if( slisten == INVALID_SOCKET )
    {
        goto leave;
	}
    // Set Port = 2000, leaving IP address = Any
    bzero( &sin1, sizeof(struct sockaddr_in) );
    sin1.sin_family = AF_INET;
    sin1.sin_len    = sizeof( sin1 );
    sin1.sin_addr.s_addr = inet_addr(ServerPAddr);
    sin1.sin_port   = htons(5150);

    //如果没有网络连接就直接跳出
	if (linkstatus==0)
	{
		goto leave;
	}

xx:	if( connect( slisten, (PSA) &sin1, sizeof(sin1) ) < 0 )
    {
        // printf("Connect failed (%d)\n",fdError());
        goto leave;
    }
    
	// 如果是网络错误,重新连接网络;如果是传输数据头错误,丢一帧继续传输
	for(;;)
	{	
		// Receive configuration information
		rxlen = recv(slisten,(char *)&rxdata_stream[0],BUFLEN,0);	
		if(rxlen == SOCKET_ERROR)
		{
			printf("recieve failed\n");
			goto xx;
		}
			
		// Send received data back to host
		Databuf = rxdata_stream;	
		while(rxlen > 0)
		{
			Tmp = send(slisten, Databuf, rxlen, 0);
			if (Tmp == rxlen)
				break;
			
			if ((Tmp == SOCKET_ERROR)||(Tmp == -1))
			{
				printf("network failed!");
				goto xx;
			}
				
			// If partional data transfered, then continue transfer
			rxlen -= Tmp;
			Databuf += Tmp;
		}	
		if(hr == SOCKET_ERROR)	
		goto xx;
	}
leave:
    // We only get here on a fatal error - close the sockets
    if( slisten != INVALID_SOCKET )
    {
        fdClose( slisten );
    }
    printf("tskNetwork Fatal Error\n");
    // This task is killed by the system - here, we block
    TaskBlock( TaskSelf() );
}



























⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -