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

📄 sample_tcpsock.c

📁 一种操作系统源码核
💻 C
字号:

#include "ebos.h"

#define MAXBUF 256

void dispstr(INT8U x,INT8U y,INT8 *str);

void AcceptTask(INT8U argc,VOID *argv)
{
 INT8U socketd;
 INT8U flag;
   INT8U buf[MAXBUF];
   argc=argc;
  socketd=*(INT8U *)argv;
   while(1){
   memset(buf,0,MAXBUF);
    while(SocketRecv(socketd,buf,MAXBUF,&flag)>0){
     memset(buf,2,MAXBUF);
     SocketSend(socketd,buf,MAXBUF,0);
   }
   CloseSocket(socketd);
   TaskSleep(20);
    }

}


void Signal_Handler(UNSIGNED signals) ;
void VIPTask( VOID )
{
   INT8 passive_socketd;
    SOCKET_ADDRESS server_addr;
    SOCKET_ADDRESS client_addr;


    NetInit();
    passive_socketd= Socket(IP_FAMILY,SOCK_DGRAM,0);
    server_addr.sock_family=IP_FAMILY;
    server_addr.sock_port=4000;
    server_addr.socket_addr.byte_addr[0] = 127;/* 127.0.0.1 */
    server_addr.socket_addr.byte_addr[1] = 0;
    server_addr.socket_addr.byte_addr[2] = 0;
    server_addr.socket_addr.byte_addr[3] = 1;
    Bind(passive_socketd,&server_addr,0);
        memset(buf,0,MAXBUF);
	while(SocketRecvFrom(passive_socketd,&client_add,buf,MAXBUF)>0){
           memset(buf,2,MAXBUF);
        SocketSendTo(passive_socketd,0,buf,MAXBUF);
         memset(buf,0,MAXBUF);
           }
       CloseSocket(passive_socketd);
         TaskSleep(20);




}


void fun1(VOID);

void fun2(VOID);

//MEMORY_POOL System_Memory;

   UNSIGNED VIPTask_Stk[STK_DEFAULT];
UNSIGNED IdleTask_Stk[STK_DEFAULT];//空闲任务自己专用的堆栈
 UNSIGNED  Stk_fun1[STK_DEFAULT];//两个新任务栈
  UNSIGNED Stk_fun2[STK_DEFAULT];//两个新任务栈


  jmp_buf jmpb;

void main(void)
{
UNSIGNED *first_available_memory;
  setjmp(jmpb); //save envionment for quit
  clrscr();
 first_available_memory=malloc(35000);
 if(!first_available_memory) exit(-1);
 MemPoolInit();
 KernalMemInit(first_available_memory);
 TaskInit();
  SemInit();
  EventInit();
  QueueInit();

  Timer_Initialize();


 // CreateTask(&IdleTask_ptr,IdleTask,&IdleTask_Stk[STK_DEFAULT],STK_DEFAULT,LOWEST_PRIORITY,-1);

  //AllocMem(&System_Memory, &pointer1, 500, NO_SUSPEND);
  //CreateTask(IdleTask,STK_DEFAULT,LOWEST_PRIORITY);
  CreateTask(VIPTask,STK_DEFAULT,1);
  CreateTask(fun1,STK_DEFAULT,3);

  Schedule();
	}

//在本例中fun1在VIPTask运行后运行,等一秒,记下VIPTask更新后的CPUSpeed,显示
//等三秒,创建fun2,然后两个用户任务一起运行
long CPUSpeedMax;
void fun1(VOID)
{
  INT8 sock_id;
  INT8 err;
  INT8U flag;
    INT8U buf[MAXBUF];
     SOCKET_ADDRESS local_addr;
   SOCKET_ADDRESS remote_addr;
   sock_id= Socket(IP_FAMILY,SOCK_STREAM,0);
    remote_addr.sock_family=IP_FAMILY;
    remote_addr.sock_port=4000;
    remote_addr.socket_addr.byte_addr[0] = 127;/* 127.0.0.1 */
    remote_addr.socket_addr.byte_addr[1] = 0;
    remote_addr.socket_addr.byte_addr[2] = 0;
    remote_addr.socket_addr.byte_addr[3] = 1;
   	err=Connect(sock_id,&remote_addr,0);
	if(err==OK){

	 memset(buf,1,MAXBUF);
	SocketSend(sock_id,buf,MAXBUF,0);
	memset(buf,0,MAXBUF);
	SocketRecv(sock_id,buf,MAXBUF,&flag) ;

	}
	 CloseSocket(sock_id);
}
void fun2( VOID)
{
  INT8 str1[50];
 static  INT8U a=0;

  dispstr(10,8,"Fun2 is Created... ");
  for(;;)
	 {
		sprintf(str1,"Fun2 is alive, Run every 0.1 Seconds %u",a++);
		dispstr(10,9,str1);

		TaskSleep(20);
	 }

}

void dispstr(INT8U x,INT8U y,INT8 *str)
{
    INT8 far *pscr;
    INT16U offset;
    offset=(INT16U)y*80*2+(INT16U)x*2;
    pscr=MK_FP(0xB800,offset); //pointer to video display buffer
    while(*str)
    {
    *pscr++=*str++;
    *pscr++=(0x00|0x0C); //back ground color "black",forground for "light red"
    }
}

⌨️ 快捷键说明

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