📄 testtcp.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 + -