资源简介
语言为C++,在单机上模拟UDP可靠通信,使用选择性重传协议.
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#pragma comment(lib“wsock32“)
using namespace std;
#define max_seq 15 //设置能发送的最大的序号
#define send_win 8 //设置发送窗口
char buff[256]; //存储你要发送的所有数据即
int pos=0; //设置内存中已从数据源中读取的位置
SOCKET s; //与服务器绑定的SOCKET
SOCKADDR_IN ser; //与服务器的地址
char send_buf[send_win][256]IP[20]recv_mes[3];
//send_buf为发送窗口中存储的数据IP服务器端的IP存储服务器端反馈的数据
int fromlen=sizeof(sockaddr); //存储sockaddr地址的长度
int timeout=1000; //设置超时重发的时间
//初始化
int Inti()
{
WSADATA wsadata;
WORD rversion=MAKEWORD(20);
int nret=WSAStartup(rversion&wsadata);
if(nret){
return 0;
}
if(wsadata.wVersion!=rversion){
return 0;
}
return 1;
}
//建立连接
int connected()
{
int nport;
s=socket(AF_INETSOCK_DGRAM0);//创建数据报套接字
if(s==INVALID_SOCKET){
cout<<“套接口创建失败(socket():“< return 0;
}
//设置超时重传
if(setsockopt(sSOL_SOCKETSO_RCVTIMEO(char*)&timeoutsizeof(timeout))==SOCKET_ERROR){
cout<<“设置接收超时失败。(setsockopt():“< closesocket(s);
return 0;
}
cout<<“请输入服务器端的IP地址(连接本地可输127.0.0.1):“< cin>>IP;
cout<<“请输入端口号:“< cin>>nport;
//与服务器进行连接
ser.sin_family=AF_INET;
ser.sin_addr.s_addr=inet_addr(IP);
ser.sin_port=nport;
return 1;
}
//请求是否可以发送
int send_request(char send_buf[send_win][256]int max_num)
{
send_buf[0][0]=‘3‘;
send_buf[0][1]=max_num;
send_buf[0][2]=‘\0‘;
while(1){
if(sendto(ssend_buf[0]strlen(send_buf[0])0(LPSOCKADDR)&sersizeof(sockaddr))==SOCKET_ERROR){
cout<<“出错:发送失败(sendto():“< return 0;
}
cout<<“等待IP为“<
if(recvfrom(srecv_messizeof(recv_mes)0(LPSOCKADDR)&ser&fromlen)==SOCKET_ERROR){
cout<<“出错:接收失败(recvfrom():“< return 0;
}
if(recv_mes[0]==‘4‘&&recv_mes[1]==max_num){
cout<<“服务器允许发送数据。开始发送...“< return 1;
}else if(recv_mes[0]==‘4‘&&recv_mes[1]==0){
cout<<“接收方正忙.你稍后再发送数据。“< return -1;
}
}
}
//从数据源buff中读取记录一个单词一个帧设置要发送的数据结构
void change(char send_buf[send_win][256]int sent_num)
{
int num=2i=(sent_num-1)%send_win;
memset(send_buf[i]0sizeof(send_buf));
send_buf[i][0]=‘2‘;
send_buf[i][1]=sent_num;
while(buff[pos]&&(send_buf[i][num++]=buff[pos++])!=‘ ‘);
send_buf[i][num]=‘\0‘;
}
//发送数据
int send_data(char send_buf[send_win][256]int max_recvint &max_sentint max_num)
{
while(max_sent<(max_recv+send_win)&&max_sent ++max_sent;
change(send_bufmax_sent);
cout<<“正在发送第“< if(sendto(ssend_buf[(max_sent-1)%send_win]strlen(send_buf[(max_sent-1)%send_win])0(LPSOCKADDR)&sersizeof(sockad
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5530 2010-01-07 05:38 Client.cpp
文件 5067 2010-01-07 05:37 Server.cpp
----------- --------- ---------- ----- ----
10597 2
相关资源
- VC 获得文件属性 获取文件的创建时
- 读者写者问题(读者优先,写者优先
- 用VC 编写的仿QQ聊天室程序源代码
- 外点法程序
- 外罚函数程序
- qt-电子点菜系统
- 推箱子及人工智能寻路C 源代码
- 自己写的航空订票系统c 版--数据结构
- 数据结构实验魔王语言
- MUSIC算法c 实现
- C 餐厅叫号系统(QT平)
- 国际象棋c 完整版
-
ob
jectARX给Auto CAD加工具条 - 画图程序MFC/VC/VC CRectTracker 串行化
- MFC网络编程实例
- c 课程设计 职工信息管理系统
- VC 游戏编程—附源代码
- IpHlpApi.h&IpHlpApi.lib
- 清华大学 c 郑莉 ppt课件
- c 程序判断离散数学中命题公式
- 多项式求和(数据结构C 版)
- vc 6.0开发的流程图编辑器
- VC 天空盒(skyBox)实现(附源代码)
- c MFC 画多边形
- 用C 实现的对网络上的ARP数据包进行
- 网络(UDP)转串口程序
- Microsoft基本类库 (MFC)(C 库)
- AR模型的c 程序
- c 图形面积计算 利用继承与多态
- 数据结构用C 写的停车场系统源代码
评论
共有 条评论