/* Demo2 for X-Server Light. Supports one server for TCP port 10001 test with XS_09201.LIB */ #include #include #include"..\lib\8000a.h" #include"..\lib\tcpip32.h" //#include"..\lib\tcpip32.h" //10.0.9.159 #include"..\lib\MFW.H" void do_echo( int skt , int mode); #define BUFSIZE 1460 /* read/write buffer size */ TCP_SERVER TcpServer={ 10000, /* port */ -1, /* socket */ 0, /* state */ 0, /* connect */ do_echo/* CallBackFun */ }; /* for xs_09001.lib ~ xs_09003.lib need the next line. int TcpServerNumber=sizeof(TcpServer)/sizeof(TCP_SERVER); */ /*************************************************************************/ char *GetModuleName(void) /* User's program must support this function for UDP search */ { return "i-7188E-XS" ; } /*************************************************************************/ char *GetAliasName(void) /* User's program must support this function for UDP search */ { return "test1" ; } /*************************************************************************/ unsigned char MyIp[4]; void XS_UserInit(int argc,char *argv[]) { extern int bAcceptBroadcast; extern unsigned long ACKDELAY; /* vaariable in tcp.c */ extern long MAXTXTOUT; void UserLoop(void); char version[20]; InitLib(); bAcceptBroadcast=0; ACKDELAY=200; XS_GetVersion(version); Print("[X-Server library]: version=%s ",version); XS_GetLibDate(version); Print("date=%s\r\n",version); GetTcpipLibDate(version); Print("Tcpip library version:%X, Library Date is %s\r\n",GetTcpipLibVer(),version); GetIp(MyIp); Print("IP=%d.%d.%d.%d\r\n",MyIp[0],MyIp[1],MyIp[2],MyIp[3]); /* for xs_09001.lib ~ xs_09003.lib NEED NOT the next 4 lines. */ XS_AddSystemLoopFun(UserLoop); /* need add this line for the library 0.9.100 date after 2004/06/02 */ XS_AddServer(&TcpServer); //Add a TCP server /* to use TCP/IP function, add the following two lines after XS library 0.9.3.00*/ XS_AddSystemLoopFun(XS_SocketLoopFun); XS_StartSocket(); //Called on xs09300.lib[2006/09/26] or later EnableWDT(); MAXTXTOUT=6000UL; /* function for */ } /*************************************************************************/ void XS_UserEnd(void) { DisableWDT(); } /*************************************************************************/ int Socket0=-1; extern int errno; long st,old_dt; unsigned char TestData='0'; void UserLoop(void) { long tmpt; int key,err; RefreshWDT(); if(Kbhit()){ switch((key=Getch())){ case 27: QuitMain=1; break; default: break; } } } /************************************************************************* * do_echo * * when client is connected, do echo here *************************************************************************/ char buf[BUFSIZE],SendBack[BUFSIZE+2]; void do_echo( int skt ,int mode) { int i, cc, err, Sendlen; if(!mode){ Sendlen=sprintf(SendBack,"Welcome connect to port %u\r\nThere are %d clients connect to this port\r\n", TcpServer.port,TcpServer.connect); goto SendMessage; } else { err = cc = readsocket( skt, buf, sizeof(buf)-1); if (err <= 0) { /* error or disconnected by remote side */ XS_CloseSocket(skt); } else { buf[cc]=0; Print(buf); for( i=0; i < cc; i++ ) { SendBack[i]=buf[i]; } Sendlen=cc; SendMessage: err= writesocket(skt,SendBack,Sendlen); if (err < 0) { /* write error */ Print( "echo write error %d\n\r", err ); XS_CloseSocket(skt); } } } } /*************************************************************************/ /* XS 0.9.200 or later must add the function main() */ void main(int argc,char *argv[]) { XS_main(argc,argv); /* call the XS library main function. */ }