测试TCP\IP的函数和类

以下所使用的框架来源于C语言技术网,大家可以到网站自行查看

服务端

/* 此程序用于演示TCP/IP的函数和类,作为服务端
 * 作者:慢慢慢  时间:2020-07-24
*/
#include "_public.h"

char strRecvBuffer[TCPBUFLEN+10];
char strSendBuffer[TCPBUFLEN+10];

CTcpServer TcpServer;

int main(int argc,char *argv[])
{
  // 此处因该使用&&,使用||是错误行为
  if ( argc != 3 && argc != 2) 
  {
    printf("\n本程序用于演示TCP/IP的函数和类,作为服务端\n");
    printf("参数有两种格式:不指定IP地址与指定IP地址\n\n");
    printf("格式:/oracle/bin/demo0 端口\n");
    printf("Example:/oracle/bin/demo0 5050\n\n");
    printf("格式:/oracle/bin/demo0 IP地址 端口\n");
    printf("Example:/oracle/bin/demo0 192.168.146.138 5050\n\n");

    return -1;
  }

  printf("程序开始\n");

  if ( argc == 2 )
  {
    if ( TcpServer.InitServer(atoi(argv[1])) == FALSE )
    {
      printf("TcpServer.InitServer(%s) failed!\n",argv[1]); return -1;
    }
  }
  if ( argc == 3 )
  {
    printf("%s\n",argv[1]);
    if ( TcpServer.InitServer(argv[1],atoi(argv[2])) == FALSE )
    {
       printf("TcpServer.InitServer(%s,%s) failed!\n",argv[1],argv[2]); return -1;
    }
  }

  if ( TcpServer.Accept() == FALSE )
  {
    printf("TcpServer.Accept() failed!\n"); return -1;
  }
  
  while (1)
  {
    memset(strRecvBuffer,0,sizeof(strRecvBuffer));
    memset(strSendBuffer,0,sizeof(strSendBuffer));

    /*
    // ???发送完毕后???
    // 没有超时机制
    if ( TcpServer.Read(strRecvBuffer) == FALSE )
    {
      printf("TcpServer.Read() failed!\n"); 
      break;
    }
    printf("Read:%s\n",strRecvBuffer);
    */

    // 有超时机制 如果正确结束想要不出现错误信息的话就是直接break
    if ( TcpServer.Read(strRecvBuffer,60) == FALSE )
    {
      if ( TcpServer.m_bTimeOut == TRUE ) printf("TimeOut\n");
      else printf("TcpServer.Read() failed!\n"); 
      break;
    }
    printf("Read:%s\n",strRecvBuffer);

    strcpy(strSendBuffer,"ok");
    if ( TcpServer.Write(strSendBuffer) == FALSE )
    {
      printf("TcpServer.Write() failed!\n"); break;
    }
    printf("Send:%s\n",strSendBuffer);

  }

  return 0;
}

客户端

/*
 * 本程序用于演示TCP\IP的函数和类,作为客户端
 * 作者:郭文强  时间:2020-07-25
*/
#include "_public.h"

char strRecvBuffer[TCPBUFLEN+10];
char strSendBuffer[TCPBUFLEN+10];

int main(int argc,char* argv[])
{
  if ( argc!=3 )
  {
    printf("\n本程于演示TCP\\IP的函数和类,作为客户端\n");
    printf("格式:/oracle/bin/demo1 IP地址 端口\n");
    printf("Example:/oracle/bin/demo1 192.168.146.137 5050\n");

    return -1;
  }

  CTcpClient TcpClient;

  char buffer[101];
  snprintf(buffer,100,"%s,%s",argv[1],argv[2]);
  if ( TcpClient.ConnectToServer(buffer) == FALSE )
  {
    printf("TcpClient.ConnectToServer(%s,%s) failed!\n",argv[1],argv[2]); return -1;
  }

  for (int i=0;i<5;i++)
  {
    memset(strSendBuffer,0,sizeof(strSendBuffer));
    snprintf(strSendBuffer,30,"这是第%d条报文",i+1);
    if ( TcpClient.Write(strSendBuffer) == FALSE )
    {
      printf("TcpClient.Write() failed!\n"); break;
    }
    printf("Write:%s\n",strSendBuffer);

    memset(strRecvBuffer,0,sizeof(strRecvBuffer));
    if ( TcpClient.Read(strRecvBuffer) == FALSE )
    {
      printf("TcpClient.Read() failed!\n"); break;
    }
    printf("Read:%s\n",strRecvBuffer);

    sleep(1);
  }

  return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值