-
大小: 16.6MB文件类型: .zip金币: 1下载: 0 次发布日期: 2023-07-31
- 语言: C/C++
- 标签:
资源简介
用c++ 的基础udp API实现了停等协议,在应用层实现了可靠udp传输,用MFC编写界面,带文档,可用于计算机网络课程设计
代码片段和文件信息
// ChatServer.cpp: 定义控制台应用程序的入口点。
//
#include “stdafx.h“
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include
#include
#include
#include
#pragma comment(lib“WS2_32.lib“)
const int LAZY = 1200;
const int MAX_CLIENT = 50;//暂时定义最大的客户端连接数为6
const int BUF_LEN = 512;
const int SEND = 1;
const int ACK = 2;
const int CONNECT = 3;
const int CONNECT_ACK = 4;
const int DISCONNECT = 5;
const int DISCONNECT_ACK = 6;
union DataPack {
char buf[BUF_LEN + 128];
struct DataDetail {
unsigned int seq;
int type;
int sender;
int reciver;
char str[BUF_LEN];
}data;
};
struct ReciveData {
DataPack data;
sockaddr_in addrClient;
};
char* encrypt(char* data);
char* decrypt(char* data);
WSADATA wsaData;//定义结构体变量
SOCKET nativeSocket;//本地开启的socket连接
sockaddr_in addrSrv addrClient;//创建套接字地址结构变量
int addrLen = sizeof(sockaddr_in);//接收客户端地址长度
DataPack buf;
std::queue sendBuffer;//发送缓存
std::queue reciveBuffer;//接受缓存
//对接收缓存的互斥信号量
HANDLE reciveBufferMutex = CreateSemaphore(
NULL //信号量的安全特性
1 //设置信号量的初始计数。可设置零到最大值之间的一个值
1 //设置信号量的最大计数
NULL //指定信号量对象的名称
);
HANDLE sendBufferMutex = CreateSemaphore(
NULL //信号量的安全特性
1 //设置信号量的初始计数。可设置零到最大值之间的一个值
1 //设置信号量的最大计数
NULL //指定信号量对象的名称
);
HANDLE sendBufferCount = CreateSemaphore(
NULL //信号量的安全特性
0 //设置信号量的初始计数。可设置零到最大值之间的一个值
INFINITE //设置信号量的最大计数
NULL //指定信号量对象的名称
);
HANDLE reciveBufferCount = CreateSemaphore(
NULL //信号量的安全特性
0 //设置信号量的初始计数。可设置零到最大值之间的一个值
INFINITE //设置信号量的最大计数
NULL //指定信号量对象的名称
);
unsigned int recordSeq[MAX_CLIENT] = { 0 };//从客户端收到的各个消息序列号
unsigned int curSeq = 0;//当前正在发送的序列号
unsigned int curACKSeq = 0;//当前收到的确认收到的序列号
unsigned int userId = 0;
sockaddr_in addrClients[MAX_CLIENT];
void initSocket() {
::WSAStartup(MAKEWORD(2 0) &wsaData);//初始化套接字库
nativeSocket = ::socket(AF_INET SOCK_DGRAM 0);//创建UDP套接字
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(75);
printf(“port = %d\n“ addrSrv.sin_port);
addrSrv.sin_addr.S_un.S_addr = INADDR_ANY;
::bind(nativeSocket (sockaddr*)&addrSrv sizeof(addrSrv));//绑定服务端地址到本地套接字
printf(“UDP服务器已启动\r\n“);//提示
}
void closeSocket() {
::closesocket(nativeSocket);//关闭套接字
::WSACleanup();//关闭套接字库
}
//发送线程,按序传送,超时重传
DWORD WINAPI sendThread(LPVOID pParam) {
ReciveData data; //缓存这个发送数据
while (true) {
if (curSeq != curACKSeq) {//如果上一个数据还没被确认
::sendto(nativeSocket encrypt(data.data.buf) sizeof(data.data.buf) 0 (sockaddr*)&data.addrClient sizeof(data.addrClient));//发送这个数据,并缓存
Sleep(LAZY);//超时等待
continue;
}
WaitForSingleobject(sendBufferCount INFINITE); //相当于P操作
if (!sendBuffer.empty()) {//发送新数据
curSeq++;//发送序号+1
data = sendBuffer.front();
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-01-23 23:38 ChatServer\
目录 0 2018-01-23 23:38 ChatServer\.vs\
目录 0 2018-01-23 23:38 ChatServer\.vs\ChatServer\
目录 0 2018-01-23 23:38 ChatServer\.vs\ChatServer\v15\
文件 27136 2018-01-23 23:29 ChatServer\.vs\ChatServer\v15\.suo
文件 37539840 2018-01-23 23:29 ChatServer\.vs\ChatServer\v15\Browse.VC.db
目录 0 2018-01-23 23:38 ChatServer\.vs\ChatServer\v15\ipch\
文件 3604480 2018-01-23 23:07 ChatServer\.vs\ChatServer\v15\ipch\1c03e232729903aa.ipch
文件 3604480 2018-01-23 23:14 ChatServer\.vs\ChatServer\v15\ipch\6ea0e97a26867c2a.ipch
文件 3670016 2018-01-23 23:03 ChatServer\.vs\ChatServer\v15\ipch\9cc5f382bab7758c.ipch
文件 3604480 2018-01-22 21:27 ChatServer\.vs\ChatServer\v15\ipch\d440f43b4ef4475e.ipch
文件 3670016 2018-01-23 23:14 ChatServer\.vs\ChatServer\v15\ipch\fe66dcd834ddeecc.ipch
目录 0 2018-01-23 23:38 ChatServer\ChatServer\
文件 19976 2018-01-23 23:14 ChatServer\ChatServer\ChatServer.cpp
文件 8217 2018-01-22 22:42 ChatServer\ChatServer\ChatServer.vcxproj
文件 1251 2018-01-22 22:42 ChatServer\ChatServer\ChatServer.vcxproj.filters
文件 322 2018-01-22 21:27 ChatServer\ChatServer\stdafx.cpp
文件 366 2018-01-22 21:27 ChatServer\ChatServer\stdafx.h
文件 370 2018-01-22 21:27 ChatServer\ChatServer\targetver.h
文件 1444 2018-01-22 21:27 ChatServer\ChatServer.sln
目录 0 2018-01-23 23:39 uuudp\
目录 0 2018-01-23 23:39 uuudp\uuuuudp\
文件 6148 2018-01-23 08:54 uuudp\uuuuudp\.DS_Store
目录 0 2018-01-23 22:53 uuudp\uuuuudp\res\
文件 598 2017-12-17 11:46 uuudp\uuuuudp\res\Toolbar.bmp
文件 2994 2017-12-17 11:46 uuudp\uuuuudp\res\Toolbar256.bmp
文件 67646 2018-01-23 22:53 uuudp\uuuuudp\res\uuuuudp.ico
文件 670 2017-12-17 11:51 uuudp\uuuuudp\res\uuuuudp.rc2
文件 1324 2017-12-17 11:58 uuudp\uuuuudp\resource.h
文件 224 2017-12-17 11:51 uuudp\uuuuudp\stdafx.cpp
文件 3050 2017-12-17 11:51 uuudp\uuuuudp\stdafx.h
............此处省略12个文件信息
- 上一篇:数据结构课程设计旅游路线
- 下一篇:zw_vc6.0可执行源码.zip
评论
共有 条评论