/* 1Ser1Cli.c: Supports one server and one Client for TCP port 10000 Compiler: BC++ 3.1, Turbo C++ 1.01(3.01) Project: 1Ser1Cli.c ..\lib\7188el.lib ..\lib\tcpip32.lib ..\lib\FW_nnnnn.lib Hordware: I-7188EX [Dec 18, 2008] by Liam [Aug,2,2011] by Nicholas */ #include #include #include "..\lib\7188e.h" #include "..\lib\Tcpip32.h" #include "..\lib\MFW.h" #define CMDPORT 10000 #define BUFSIZE 1460 /* read/write buffer size */ void do_echo( int skt , int mode); void do_GetResponse( int skt,int mode); // TCP client's callback function void ShowSocketStatus(void); TCP_CLIENT TcpClient; TCP_SERVER TcpServer; unsigned char MyIp[4]; char *GetModuleName(void) /* User's program must support this function for UDP search */ { return "I-7188EX-FW" ; } char *GetAliasName(void) /* User's program must support this function for UDP search */ { return "test1" ; } void XS_UserInit(int argc,char *argv[]) { extern int bAcceptBroadcast; extern unsigned long ACKDELAY; /* variable in tcp.c */ extern long MAXTXTOUT; void UserLoop(void); char version[20]; char slocalIP[17]; 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); sprintf(slocalIP,"%d.%d.%d.%d",MyIp[0],MyIp[1],MyIp[2],MyIp[3]); Print("IP=%s\r\n", slocalIP); XS_AddSystemLoopFun(UserLoop); TcpClient.ip="10.0.9.49"; // default IP TcpClient.port=CMDPORT; // unsigned port; TcpClient.socket=-1; // int socket; TcpClient.tmpState=0; // int tmpState; TcpClient.bConnected=-1; // int bConnected; TcpClient.iConnectTryCount=1; // int iConnectTryCount; // Frequency to reconnect to remote device TcpClient.lConnetTimeout=4000; // Timeout to connect to remote device(0: default value is 400ms) TcpClient.ltmpT=0; // long ltmpT; TcpClient.CallBackFun=do_GetResponse; // void (*CallBackFun)(int skt); TcpClient.LoopFun=NULL; // void (*LoopFun)(void) XS_AddClient(&TcpClient); // Add a client TcpServer.port=CMDPORT; // unsigned port; TcpServer.socket=-1; TcpServer.state=0; TcpServer.connect=0; TcpServer.CallBackFun=do_echo; // void (*CallBackFun)(int skt,int mode); XS_AddServer(&TcpServer); // Add a TCP server // EnableWDT(); XS_AddSystemLoopFun(XS_SocketLoopFun); XS_StartSocket(); MAXTXTOUT=6000UL; } void XS_UserEnd(void) { XS_StopSocket(); DisableWDT(); } unsigned status_8019as=0; extern int errno; unsigned char TestData='0'; unsigned long gltem; int giSend; void UserLoop(void) { long tmpt; int key,err; char sTemp[20]; int iLen; RefreshWDT(); if(Kbhit()) { switch((key=Getch())) { case 27: QuitMain=1; break; case 'c': case 'C': if(TcpClient.bConnected==-1) { TcpClient.bConnected=-2; } Print( "connect \r\n"); giSend=1; break; case 'q': case 'Q': // Break the TCP connection if(TcpClient.bConnected==1) XS_CloseSocket(TcpClient.socket); giSend=0; break; case 's': case 'S': ShowSocketStatus(); break; default: break; } } if(TcpClient.bConnected==1 && giSend==1) // Send First package { iLen=sprintf(sTemp, "%s", "Ethernet echo test!!\r\n"); Print("bConnected \r\n"); err=writesocket(TcpClient.socket, sTemp, iLen); if(err<0) // write error { Print( "write error %d, close client socket.\r\n", err); XS_CloseSocket(TcpClient.socket); } giSend=0; } } char buf[BUFSIZE], SendBack[BUFSIZE+2]; // when client is connected, do echo here void do_GetResponse(int skt, int mode) { int i, cc, err, Sendlen; if(!mode) { if(TcpClient.bConnected==1) { Print("Connected\r\n"); } else if(TcpClient.bConnected==-1) Print("%s connect failed\r\n",TcpClient.ip); } else { err=cc=readsocket(skt, buf, sizeof(buf)-1); if(err<=0) // error or disconnected by remote side { Print("%d TcpClient close skt = %d\r\n", err, skt); XS_CloseSocket(skt); } else { for(i=0; i