以下所使用的框架来源于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;
}