资源简介
滑动窗口协议.zip
代码片段和文件信息
#include“socket_udp.h“
#define HLEN 3//帧头部长度
#define DLEN 8//帧数据长度
#define ALEN 3//ACK帧长度
#define SWP_SEND_TIMEOUT 500//定义超时长度为500ms
#define link “127.0.0.1“//定义要发送的对象
#define FLAG_ACK_VALID ‘a‘//定义ACK帧
#define FLAG_DATA_VALID ‘d‘//定义数据帧
#define SUCCESS 1;//定义已经成功收到的消息
static void sendSWP(SwpState *stateMsg *frame);//发送函数
static int deliverSWP(SwpState *stateMsg *frame);//接收并返回ACK函数
//发送
static void semWait(Semaphore *sendWindowNotFull);//信号量处理(-1)
static void store_swp_hdr(SwpHdr hdrchar *hbuf);//存储发送的帧头部
static void msgAddHdr(Msg *framechar *hbuf);//将头部添加到帧上
static void msgSaveCopy(char *msgMsg *frame);//将消息添加到帧上
static Event evSchedule(Msg *frameint time);//调用定时器函数
DWORD WINAPI swpTimeout(LPVOID threadtype);//创建定时器线程
static void send_socket(char *addrMsg *frameint size);//UDP发送
static void mlisten();//监听数据
static void msend();//发送数据
//接收
static char *msgStripHdr(Msg *frameint length);//获取帧的头部
static void load_swp_hdr(SwpHdr *hdrchar *hbuf);//帧头部提取字符串
static bool swpInWindow(SwpSeqno AckNumSwpSeqno LARSwpSeqno LFS);//判断收到的帧是否在窗口内
static void evCancel(Event *);//取消超时定时器
static void msgDestroy(Msg *msg);//释放msg空间
static void semSignal(Semaphore *sendWindowNotFull);//信号量处理(+1)
static void prepare_ack(Msg *msgSwpSeqno n);//组成ACK消息
//全局变量
HANDLE hlisten;
HANDLE hsend;
SwpState *send_state;
Msg *frame;
HANDLE Mutex = CreateMutex(NULLFALSENULL);
void main(){
//模拟滑动窗口接收和发送过程
//初始化SwpStateMsg数据帧组帧
//启动两个线程,模拟收发
//监听终止
frame=(Msg *)malloc(11*sizeof(Msg));
//初始化消息
//frame=“message“;//8个字节的数据
//初始化状态
send_state=(SwpState *)malloc(sizeof(SwpState));
send_state->LAR=‘0‘;
send_state->LFS=‘0‘;
send_state->NFE=‘0‘;
send_state->sendWindowNotFull=CreateSemaphore(NULLSWSSWSNULL);
if(send_state->sendWindowNotFull==NULL){
printf(“CreateSemaphore error\n“GetLastError());
exit(0);
}
send_state->hdr.SeqNum=‘0‘;//3个字节头部
send_state->hdr.AckNum=‘0‘;
send_state->hdr.Flags=‘d‘;
for(int i=0;i send_state->sendQ[i].msg=(Msg *)malloc(8*sizeof(Msg));
send_state->sendQ[i].msg=“message“;
send_state->sendQ[i].timeout=NULL;
}
for(i=0;i send_state->recvQ[i].msg=(Msg *)malloc(8*sizeof(Msg));
send_state->recvQ[i].msg=“message“;
send_state->recvQ[i].recevied=NULL;
}
//初始化UDP函数
WSADATA wsaData;
if (WSAStartup(MAKEWORD(21)&wsaData)){
printf(“Winsock initializing fail\n“);
WSACleanup();
return;
}
//建立监听线程
hlisten=CreateThread(NULL0(LPTHREAD_START_ROUTINE) mlistenNULLCREATE_SUSPENDEDNULL);
ResumeThread(hlisten);
if(hlisten==NULL){
printf(“thread_listen create fail\n“);
}
hsend=CreateThread(NULL0(LPTHREAD_START_ROUTINE) msendNULLCREATE_SUSPENDEDNULL);
ResumeThread(hsend);
if(hsend==NULL){
printf(“thread_send create fail\n“);
}
Sleep(10000);
WSACleanup();
}
static void msend(){
printf(“thread_send started\n“);
while(1){
sendSWP(send_stateframe);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-10-31 19:00 Debug\
文件 32204 2018-10-31 19:00 Debug\socket_udp.obj
文件 148480 2018-10-31 19:00 Debug\vc60.idb
文件 77824 2018-10-31 19:00 Debug\vc60.pdb
文件 176171 2018-10-31 19:00 Debug\xieyi.exe
文件 207796 2018-10-31 19:00 Debug\xieyi.ilk
文件 3596772 2018-10-31 18:05 Debug\xieyi.pch
文件 459776 2018-10-31 19:00 Debug\xieyi.pdb
文件 9025 2018-10-31 18:59 socket_udp.cpp
文件 1065 2018-10-31 18:05 socket_udp.h
文件 4342 2018-10-31 19:17 xieyi.dsp
文件 516 2018-10-31 18:04 xieyi.dsw
文件 33792 2018-10-31 19:17 xieyi.ncb
文件 48640 2018-10-31 19:17 xieyi.opt
文件 1360 2018-10-31 19:00 xieyi.plg
相关资源
- nrf905KB-1B-1BV3.42.zip
- 九宫格源代码八数码算法VC实现.rar
- 985高校204套电子电气专业课题设计、
- 基于单片机的直流电机PWM调速控制系
- 计算机专业复试面试经典问题(含答
- libstdc-devel-4.4.7-4.el6.x86_64.rpm
- ImageEditDemo.zip
- 20170508095032398.rar
- Saber软件.rar
- txt(5)
- httpclient-4.5.3.CHM
- 计150326周艺最新版本.zip
- 基于RFID的学生门禁系统C源码、说明文
- 信息安全技术_网络安全等级保护基本
- 16G101-1图集CAD版.dwg
- 1.rar
- ncm-solutions.zip
- pat-basic-v2.4.pdf
- HDMI_CTS_2_0e.pdf
- IEEE802.15.4e-2012版.rar
- Solutions-Elementsofinformationtheory(2ndEdi
- -EXE.rar
- superRecovery.zip
- 大淘客CMS加淘口令和底部导航菜单源
- testDate.zip
- Embarcadero.ERStudio.v8.0.2.5991-Crack.rar
- studentweb.rar
- charting_library-master.zip
- TIJ-3rd-edition4.0.zip
- 图书ISBN信息批量查询程序.rar
评论
共有 条评论