⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testtcp.c

📁 Rabbit4000单片机的网络编程
💻 C
字号:
/*
  该程序等待并相应连接请求。简建立连接之后,嵌入式系统等待接收数据,读取1字节,递增1后回送
  到远程主机,并关闭连接。该程序可作为模板,用于计算机向嵌入式系统发送请求或命令,且嵌入式系统
  返回相应的应用程序。
  Made By : dengcongyang
  2007.5.29
*/

#define TCPCONFIG 1
#define LOCAL_PORT 5551
#define MAX_TCP_SOCKET_BUFFERS 1
#memmap xmem
#use "dcrtcp.lib"

char server_buffer[255];
int bytes_read;
int return_value;

tcp_Socket server_socket;

void service_request();
int connection_established();
int check_for_received_data();

main()
{
	int data_available;
   return_value = sock_init();    //调用该函数使能TCP/IP功能
   if(return_value == 0)          //调用无穷循环执行处理TCP通信
   {
   	while(1)
      {
      	costate
         {
         	tcp_listen(&server_socket,LOCAL_PORT,0,0,NULL,0);
            printf("Waiting for connection......\n");

            waitfor(connection_established());
            printf("Connection established.\n");

            waitfor(check_for_received_data() || DelaySec(20));

            data_available = check_for_received_data();
            if(data_available > 0)
            {
            	service_request();      //该函数读取该字节并返回相应
            }
            else
            {
            	printf("TimeOut:the remote host provided no data.\n");
            }
            sock_close(&server_socket);    //关闭连接
            printf("The connection is closed.\n");
         } //结束costate
      }   //结束while(1)
   }     //结束if(return_value == 0)
   else
   {
   	printf("The network is not available.\n");
      exit(0);
   }
}

int connection_established()  //检查与远程主机的连接,建立连接则返回1,否则返回0
{
	tcp_tick(NULL);      //处理网络数据包
   if(!sock_established(&server_socket) && sock_bytesready(&server_socket) == -1)
   {
   	return 0;
   }
   else
   {
   	return 1;
   }
}

int check_for_received_data()  //检查接收的数。sock_bytesready()返回等待读取的数据字节数
{                          //若没有数据,返回-1,若数据有效,则check_for_received_data()返回1
	tcp_tick(&server_socket);
   if(sock_bytesready(&server_socket) == -1)
   {
   	return 0;
   }
   else
   {
   	return 1;
   }
}

void service_request()  //读取接收到的数据,并向远程主机发送相应
{
	bytes_read = sock_fastread(&server_socket,server_buffer,sizeof(server_buffer));
   if(bytes_read > 0) //接收到一个字节后,程序将该字节递增1,如果值为255,则将其复位为0
   {
   	printf("Bytes received = %d\n",server_buffer[0]);
      if(server_buffer[0] == 255)
      {
      	server_buffer[0] = 0;
      }
      else
      {
      	server_buffer[0] = server_buffer[0] + 1;
      }
	   return_value = sock_write(&server_socket,server_buffer,1);
	   if(return_value != -1)
	   {
	      printf("Bytes sent = %d\n",server_buffer[0]);
	   }
	   else
	   {
	      printf("Error writting to socket.\n");
	   }
   }   //结束if(bytes_read > 0)
   else
   {
   	printf("Error reading from socket.\n");
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -