/* Client.c: Implement one TCP/IP client connection. Support one client for TCP port 10001. Compiler: BC++ 3.1, Turbo C++ 1.01(3.01) (free from http://cc.codegear.com/free/cpp) Compile mode: Large Project: Client.c ..\lib\7186el.Lib ..\lib\tcp_dm32.lib ..\lib\FW_nnnnn.LIB [Nov 04, 2008] by Liam */ #include #include #include "..\lib\vp2k.h" #include "..\lib\Tcpip32.h" #include "..\lib\MFW.h" #define BUFSIZE 1460 // read/write buffer size void do_GetResponse(int skt); //TCP client's callback function void ShowSocketStatus(void); // Initialize a TCP Client with default IP 10.0.8.157 and port 10001 TCP_CLIENT TcpClient= { "10.1.0.30", // char *ip; 10000, // unsigned port; -1, // int socket; 0, // int tmpState; -2, // int bConnected; 10, // int iConnectTryCount; // Frequency to reconnect to remote device 4000, // long lConnetTimeout; // Timeout to connect to remote device // 0: default value is 400ms 0, // long ltmpT; (void *) do_GetResponse, // void (*CallBackFun)(int skt); NULL }; char *GetModuleName(void) /* User's program must support this function for UDP search */ { return "uPAC-7186EX-FW"; } 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; extern long MAXTXTOUT; void UserLoop(void); char version[20]; int i, port; 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]); XS_AddSystemLoopFun(UserLoop); // Process of the arguments for(i=1; i99 if(idx<99) idx++; Putch(key); if(key=='\r') { // The terminal character of a string is '\r' (Press 'Enter' key) Command[idx]=0; Putch('\n'); if(Command[0]=='/') { // '/' denotes that the inputted string was a command if(Command[1]=='Q') { // Break the TCP connection if(TcpClient.bConnected==1) { XS_CloseSocket(TcpClient.socket); } } else if(Command[1]=='C') { // Build the TCP connection if(TcpClient.bConnected==-1) { TcpClient.bConnected=-2; } } else if(Command[1]=='0' && Command[2]=='0') { // Show the socket status ShowSocketStatus(); } else { // unknow command Print("Unsupport command\r\n"); } } else if(TcpClient.bConnected==1) { // The String that isn't the command will send to client err=writesocket(TcpClient.socket, Command, idx); Print(Command); if(err<0) { // write error Print("write error %d, close client socket.\r\n", err); XS_CloseSocket(TcpClient.socket); } } else { Print("[do nothing]\r\n"); Print("TcpClient.bConnected == %d\r\n", TcpClient.bConnected); } idx=0; } break; } } } char buf[BUFSIZE], SendBack[BUFSIZE+2]; // when client is connected, do echo here void do_GetResponse(int skt) { int i, cc, err, Sendlen; err=cc=readsocket(skt, buf, sizeof(buf)-1); if(err<=0) { // error or disconnected by remote side XS_CloseSocket(skt); } else { for(i=0; i