Host-Based Mode

RSIP will wait for connection when it runs under Host-Based Mode. Reomte PC can directly connect to RSIP and send/receive data to/from it. RSIP will convert data between TCP/IP and RS232/422/485. Here are some sample code for Visual C++ under Windows.

#include <stdio.h>
#include <winsock.h>
#include <conio.h>

int main(int nArgCnt,char *pszArg[])
{
  // Check arguments
  if(nArgCnt!=3)
  {
    printf("Usage: DMEO <ip> <port>\n");
    return 1;
  }

  // Initialize WinSock.DLL
  WSADATA m_WSAData;
  if(WSAStartup(0x101,(LPWSADATA)&m_WSAData)!=0)
  {
    printf("Unable to initialize WINSOCK.DLL\n");
    WSACleanup();
    return 1;
  }

  // Get IP and port
  unsigned long lIp = inet_addr(pszArg[1]);
  int nPort = atoi(pszArg[2]);

  // Open socket and connect to RSIP
  SOCKET s = socket(AF_INET,SOCK_STREAM,0);
  sockaddr_in sai;
  sai.sin_family = AF_INET;
  sai.sin_addr.s_addr = lIp;
  sai.sin_port = htons(nPort);
  if(connect(s,(LPSOCKADDR)&sai,sizeof(sai))==SOCKET_ERROR)
  {
    printf("Unable to connect to RSIP\n");
    WSACleanup();
    return 2;
  }
  printf("Connected to %s:%s\n",pszArg[1],pszArg[2]);

  // A easy talk program, press ESC to break.
  const int BUF_SIZE = 1024;
  char szBuf[BUF_SIZE];
  while(TRUE)
  {
    if(kbhit())
    {
      char c = getch();
      if(c==27)
        break;
      send(s,&c,sizeof(char),0);
    }

    // Check socket buffer
    unsigned long lArg = 1;
    ioctlsocket(s,FIONBIO,&lArg);
    int n = recv(s,szBuf,BUF_SIZE,MSG_PEEK);
    lArg = 0;
    ioctlsocket(s,FIONBIO,&lArg);

    // Is data ready ?
    if(n>0)
    {
      recv(s,szBuf,sizeof(char),0);
      printf("%c",szBuf[0]);
    }
  }

  // Close socket and Uninitialize WinSock.DLL
  closesocket(s);
  WSACleanup();
  printf("Program terminated\n");
  return 0;
}


Back