• 大小: 11.58MB
    文件类型: .7z
    金币: 1
    下载: 0 次
    发布日期: 2023-08-05
  • 语言: 其他
  • 标签: 源码  实验  

资源简介

华中科技大学计算机学院计算机网络实验源码及实验报告,含socket编程实验、可靠数据传输协议实验、CPT组网实验共3次实验的工程文件,以及最后的实验报告。

资源截图

代码片段和文件信息

#include “connThread.h“

connThread::connThread(Qobject *parent) : Qobject(parent)
{

}

connThread::connThread(SOCKET connSocksockaddr_in clientAddrQString root_path)
{
    //初始化
    this->connSock = connSock;
    this->clientAddr = clientAddr;
    this->root_path = root_path;
    this->clientIp = nullptr;
}

connThread::~connThread()
{
    //关闭socket
    int ret = closesocket(connSock);
    if( ret == SOCKET_ERROR ){
        qDebug()<< “关闭成功“;
    }
}

void connThread::recvConn()
{
    char send_buf[1024];        //定义接收缓冲区
    char recv_buf[1024];        //定义发送缓冲区
    clientIp = inet_ntoa(clientAddr.sin_addr);//获取客户端IP
    clientPort = ntohs(clientAddr.sin_port);//获取客户端端口号

    int error = 0;
    while(true)
    {
        //清空缓冲区
        memset(send_buf0sizeof (send_buf));
        memset(recv_buf0sizeof (send_buf));
        //接收数据
        int ret = recv(connSockrecv_bufsizeof (recv_buf)0);
        qDebug() << recv_buf;
        if(ret == SOCKET_ERROR)
        {
            //接收错误,关闭连接
            error = WSAGetLastError();
            qDebug() << “recv error:“<            emit finished();
            return;
        }

        if(ret == 0)
        {
            //缓冲区没有数据,关闭连接
            qDebug() << “recvnum: 0“;
            emit finished();
            return;
        }
        qDebug() << “recvByte:“ << ret;
        qDebug()<
        recv_buf[ret] = ‘\0‘;
        //使用qfile发送数据
        QString::SectionFlag flag2 = QString::SectionSkipEmpty;     //忽略多余的空格的标志
        QString *path = new QString(recv_buf);                      //将char类型数组转换为QString类型
        QString url;                                                //http报文中的url
        url = (*path).section(‘ ‘ 1 1 flag2);
        QString contentype;                                         //发送文件类型
        contentype = url.section(‘.‘ 1 1 flag2);

        if(url == QString::fromLocal8Bit(“/“))
        {
            show_index(url);            //如果请求为IP地址,显示默认界面
            continue;
        }

        //获取到请求文件的绝对路径
        QString request = root_path + url;
        qDebug() << request;

        QFile file(request);                                //使用Qfile打开文件
        if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
        {
            qDebug() << “打开文件失败“;
            send_404(connSock);                             //发送404响应
            emit open_fail(clientIp clientPort url);      //打开文件失败信号
        } else {
            qDebug() << “打开文件成功“;
            QByteArray file_byte = file.readAll();
            file.close();

            //发送响应
            if(!send_head(connSock file_byte.length() contentype))
            {
                emit send_fail(clientIp clientPort url);      //发送响应失败信号
            } else {
                if(send_file(connSock request))                //发送文件
                {
                    emit send_succ(clientIp clientPort

评论

共有 条评论