本项目旨在通过C语言编程实现Go-Back-N滑动窗口协议。此协议是一种用于数据链路层可靠数据传输的方法,能够有效避免数据包丢失和重复发送的问题。项目包括接收方与发送方程序设计、序列号生成及超时重传策略等核心功能的开发。
模仿数据链路层的gobackn协议
该协议是搭载ACK的回退N步协议。
```c
#include
#include protocol.h
#define max_seq 7
#define flag 126
#define ESC 100
#define wait_time 2700 //发送计时器等待的时间
#define ack_wait_time 280
static int phl_ready = 0;
void send_ack() {
for (int i = 0; i < 7; ++i) {
if(ack[i]==ESC || ack[i]==flag)
send_byte(ESC);
send_byte(ack[i]);
}
}
void handle_data_incoming(int arg) {
int in_len = 0;
for (int i = 0; i < arg; ++i, ++in_len) { //挨个字节处理
char byte_received = recv_byte();
if(in_len > 0 && end_flag(in_len)==0 && byte_received == flag) {
int m=0, j=0;
for(;m
优质
本项目通过C语言编写实现了基于UDP协议的数据传输程序,演示了如何在客户端与服务器之间进行非连接模式下的数据发送和接收。
在UDP_server.c文件中,使用socket()函数创建一个套接字,并通过bind()将特定的地址端口绑定到该套接字上。然后开始监听这个端口并等待数据传输。其中包含发送与接收函数,可以方便地收发数据包;收到的数据会被提取出IP、端口号和信息内容,在终端显示出来。
在UDP_client.c文件中,同样创建一个套接字,并直接向指定的IP地址及端口发送数据而无需进行监听操作。我利用了while(1)循环不断发送消息,其中发送的内容、目标IP以及端口都是通过参数输入给程序的。代码经过gcc编译并通过测试运行正常。
值得一提的是,在使用arm-linux-gcc对这些源码进行了交叉编译后,将其部署到ARM板上进行验证时也能够顺利执行,并且其功能表现与在电脑上的效果完全一致。