基于WinSocket实现C-S文件传输系统——“闪翼文件传输系统”**
QT分别打开客户端和服务器的.pro文件载入工程,编译运行**
1、打开服务器,输入端口号并启动服务器
2、打开一个客户端,在连接服务器成功之前,并不能进行登录操作
3、客户端成功连接服务器,正确输入用户名和密码后客户端登陆成功
4、显示服务器的文件路径(服务器项目的构建文件路径)
5、显示服务器的默认文件列表(默认文件列表为服务器项目所在的文件列表)
6、上传文件到服务器(在客户端创建一个文本文件CliUpload.txt用于上传)
7、从服务器下载文件到客户端(在服务器创建一个文本文件SerDownload.txt用于下载)
8、关闭客户端,需要重连服务器且重新登陆
客户端

服务端

部分源码:
#include "clithread.h"
CliThread::CliThread(SOCKET mListen, QWidget *parent) : QThread(parent)
{
this->mListen = mListen;
this->parent = parent;
}
CliThread::~CliThread()
{
closesocket(mListen);
emit isClose();
}
void CliThread::run()
{
//客户端地址
sockaddr_in cli_address;
int size = sizeof(cli_address);
while(!isInterruptionRequested())
{
//每次接收新客户端时,将之前的地址信息清0
memset(&cli_address, 0, sizeof(cli_address));
//等待新客户端连接
SOCKET cli_socket = accept(mListen, (SOCKADDR*)&cli_address, &size);
if(cli_socket == INVALID_SOCKET)
{
msg = "创建cli_socket失败";
emit isMsg(msg);
return;
}
msg = "客户端连接成功";
emit isMsg(msg);
//开启新线程与客户端进行通信
MsgThread* FileThread = new MsgThread(cli_socket, cli_address, parent);
FileThread->start();
//绑定信号和槽,转发消息给ui进程进行界面更新
connect(FileThread, &MsgThread::isMsg, this, &CliThread::sendMsg);
connect(this, &CliThread::isClose,
[=]()
{
msg = "客户端断开连接";
emit isMsg(msg);
FileThread->terminate();
FileThread->quit();
delete FileThread;
});
}
}
void CliThread::sendMsg(QString msg

最低0.47元/天 解锁文章
2025

被折叠的 条评论
为什么被折叠?



