资源简介
udp滑动窗口完美实现,,如果想了解怎么用udp实现完美,流量控制 ,超时机制
代码片段和文件信息
/* *********************************************************************
文 件: Leclient.c
项 目: Legend
作 者: 余 强
日 期: 2009-12-24~2010-03-13
版 权: Copyright (C) 2010 Yu Qiang (GPL)
E-mail: yuembed@126.com
博 客: 『20065562‘s Blog』 有水的地方就有余 http://hi.baidu.com/20065562
***********************************************************************
*/
#include
#include
#include /* closereadgethostname */
#include /* gethostbyname */
#include /* pthread */
#include
#include
#include
#include
#include /* inet_addr */
#include /* htons ... */
#include
#include /* gettimeofday */
#include “Leutiles.h“
#include “Lesendui.h“ /* sendui_item_status */
#include “Legend.h“
#include “Lequeue.h“
#include “Lepool.h“
#include “Leclient.h“
/* 本地局部变量
***********************************************************************
*/
static void client_data_sent(void* stmgr);
static gint client_timeout(gpointer data);
/* 接口函数实现
***********************************************************************
*/
/* 清除STMGR结构体 */
void stmgr_clean(STMGR* stmgr)
{
STMGR* manage = stmgr;
QNode* node = NULL;
pthread_mutex_destroy(&manage->lock);
pthread_cond_destroy(&manage->notfull);
pthread_cond_destroy(&manage->notempty);
pthread_cond_destroy(&manage->nomorethan);
g_free(manage->thaddr);
node = manage->queue->front;
while(node != NULL){
pool_back(node->pack);
node = node->next;
}
clean(&(manage->queue));
g_free(manage);
}
/* 终止正在发送的文件项 */
void client_item_abort(STMGR* stmgr)
{
STMGR* manage = stmgr;
PACKAGE* spack;
socklen_t addr_len = sizeof(struct sockaddr);
int nbrs;
sendui_item_status(manage STATUS_SABORT);
pthread_cancel(manage->stid); /* 客户端:2终止数据发送线程 */
/* FIXME:怎么终止接收响应线程 */
spack = pkg_new_status();
LG_PACKAGE_STATUS(spack)->status = ABORT;
if((nbrs = sendto(manage->sockfd spack PKG_LENGTH_STATUS 0
(struct sockaddr*)(manage->thaddr)
addr_len)) == -1){
perror(“文件状态包发送失败“);
}
gtk_timeout_remove(manage->timer);
/* 清除结构体 */
stmgr_clean(manage);
}
/* 客戶端 接收线程 */
void client_send_thread(void* stmgr)
{
STMGR* manage = (STMGR*)stmgr;
int sockfd; /* 发送文件套接字 */
PACKAGE* finfor; /* 文件信息包 */
PACKAGE* data;
QNode* node;
int nbrs; /* 发送数据大小 */
struct sockaddr_in svr_addr; /* 服务器地址信息 */
struct sockaddr_in thaddr;
socklen_t addr_len;
char buf[MAX_PACKAGE_SIZE]; /* 接收Legend包缓冲区 */
char* filename;
int rtt;
struct timeval start end;
/* 发送文件名 */
filename = get_name_from_path(manage->file);
finfor = pkg_new_finfor();
strcpy(LG_PACKAGE_FINFOR(finfor)->name filename); /* 设置要传送的文件名 */
strcpy(LG_PACKAGE_FINFOR(finfor)->user manage->user); /* 设置发送者昵称 */
LG_PACKAGE_FINFOR(finfor)->size = manage->size; /* 设置文件大小 */
LG_PACKAGE_FINFOR(finfor)->length = MAXBUFLEN; /* 设置数据块大小 */
LG_PACKAGE_FINFO
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2010-03-19 10:16 Legend1.0.0alpha源代码\
目录 0 2010-03-19 10:16 Legend1.0.0alpha源代码\doc\
目录 0 2010-03-19 10:16 Legend1.0.0alpha源代码\make\
文件 1341 2010-03-02 20:29 Legend1.0.0alpha源代码\make\builddir.mak
文件 845 2010-01-14 17:55 Legend1.0.0alpha源代码\make\common.mak
目录 0 2010-03-19 10:16 Legend1.0.0alpha源代码\make\config\
文件 1542 2010-02-18 10:14 Legend1.0.0alpha源代码\make\config\generate_conf.pl
文件 164 2010-02-18 10:10 Legend1.0.0alpha源代码\make\config\stand_app.cfg
文件 2050 2010-03-04 20:26 Legend1.0.0alpha源代码\make\ctool.mak
文件 3168 2010-03-02 20:31 Legend1.0.0alpha源代码\make\default.mak
目录 0 2010-03-19 10:16 Legend1.0.0alpha源代码\make\doc\
文件 34816 2009-09-23 15:55 Legend1.0.0alpha源代码\make\doc\Makefile │г╙├║п╩¤▒э.doc
文件 1356 2010-02-19 11:02 Legend1.0.0alpha源代码\make\environment.mak
文件 2046 2010-03-02 20:36 Legend1.0.0alpha源代码\make\setup.mak
文件 1717 2010-03-02 20:27 Legend1.0.0alpha源代码\setenv.sh
目录 0 2010-03-19 10:16 Legend1.0.0alpha源代码\src\
目录 0 2010-03-19 10:16 Legend1.0.0alpha源代码\src\config\
文件 200 2010-03-15 14:38 Legend1.0.0alpha源代码\src\config\app.cfg
文件 238 2010-02-11 22:11 Legend1.0.0alpha源代码\src\config\legend.cfg
目录 0 2010-03-19 10:16 Legend1.0.0alpha源代码\src\data\
文件 675 2010-03-15 14:38 Legend1.0.0alpha源代码\src\data\log.dat
文件 650 2010-03-15 14:38 Legend1.0.0alpha源代码\src\data\user.dat
目录 0 2010-03-19 10:16 Legend1.0.0alpha源代码\src\gui\
目录 0 2010-03-19 10:16 Legend1.0.0alpha源代码\src\gui\include\
文件 1360 2010-02-18 10:17 Legend1.0.0alpha源代码\src\gui\include\Lecmd.h
文件 822 2010-02-09 11:36 Legend1.0.0alpha源代码\src\gui\include\Lefiniui.h
文件 517 2010-02-11 13:52 Legend1.0.0alpha源代码\src\gui\include\Legui.h
文件 578 2010-03-03 22:29 Legend1.0.0alpha源代码\src\gui\include\Lehead.h
文件 588 2010-03-02 18:51 Legend1.0.0alpha源代码\src\gui\include\Leinfor.h
文件 620 2010-03-04 20:36 Legend1.0.0alpha源代码\src\gui\include\Lemenu.h
文件 991 2010-03-06 15:20 Legend1.0.0alpha源代码\src\gui\include\Lerecvui.h
............此处省略117个文件信息
相关资源
- rtsp视频组帧(tcp和udp)
- 特征提取之滑动窗口
- CC3200 UDP TCP透传
- Qt 用TCP和UDP传图片
- Qt基于tcp和udp局域网聊天工具
- 配电系统可靠性实用基础(陈文高)
- 数据恢复 带注册码 已用多年 可靠,
- STM32 UIP演示
- TCP连接测试工具_强烈推荐!
- TCP/IP调试工具大合集
- 配电网可靠性评估
- Qt通过UDP传图片 实现自定义分包和组
- 安全壳喷淋系统可靠性分析FTA和RBP
- UDP socket 多线程
- 基于DM9000的FPGA程序
- 网络调试助手-全平台
- STM32F103C8T6核心板 + ENC28J60
- 滑动窗口协议模拟程序
- 基于UDP协议的视频传输
- 网络嗅探,主机扫描,端口扫描
- 模拟滑动窗口协议的1bit滑动窗口协议
- UDP通信程序UDP_COM_V30.rar
- UDP 类 UDP DLL 客户端 服务器端测试程
- 8266的所有的UDP、TCP协议的工程
- LPC1766 Lwip UDP
- 管家婆ERP9.2A8V3通用免狗补丁 稳定可靠
- TCP IP数据包分析程序篇
- 可靠性增长试验 Duane模型 AMSAA模型
- cuda_cudpp源码
- 基于Kriging方法的结构可靠性分析及优
评论
共有 条评论