YFSafe 2022-03-08 23:32 采纳率: 66.7%
浏览 12
已结题

socket相关问题

在尝试多线程传输文件时出现的问题,帮忙看看。

#define _CRT_SECURE_NO_WARNINGS 1
#include <winsock2.h> 
#include <stdio.h> 
#include <windows.h>
#include <string.h>
#pragma comment(lib,"ws2_32.lib")
#include<iostream>
using namespace std;
struct FileName {//用来存储和传输文件名扩展名的结构体
    char Fname[64];
    int len;
};
sockaddr_in sa,sc;
int client;
unsigned int threadID;
char buff[10005];
char p[] = "C:\\Users\\apple\\Desktop\\";
const char * endpath;
FILE *fp;
FileName fn;
    unsigned int __stdcall RecieveFile(PVOID PM)
    {
        char p[64];
        strncpy(p,TEXT(endpath),sizeof(endpath));
        int len = strlen(p);
        if (p[len - 1] != '\\')
        {
            p[len] = '\\';
            len++;
        }
        recv(client, (char*)&fn, sizeof(fn),0);
        strcat(p, fn.Fname);
        long long siz;
        recv(client, (char*)&siz, sizeof(siz), 0);
        siz = siz / 10005;
        cout << endpath << endl;
        fp = fopen(endpath, "wb+");
        long long int index = 0;
        int num;
        while (index<=siz)
        {
            num = recv(client, buff, 10005, 0);
            if (num <= 0)
            {
                cout << num << endl;
                cout << WSAGetLastError() << endl; 
                break;
            }
            fwrite(buff, (int)num, 1, fp);
            cout << "write:" << GetLastError() << endl;
            fclose(fp);
            index++;
 
            cout << (int)index * 100 / siz << num<<endl;
        }
        printf("success\n");
        return 0;
    }
int main()
{
    SOCKET msock,ssock;
    WSADATA WSAData;
    WSAStartup(MAKEWORD(2, 2), &WSAData);
    msock = socket(PF_INET, SOCK_STREAM, 0);
    sa.sin_family = AF_INET;
    sa.sin_port = htons(3000);
    sa.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
    bind(msock, (struct sockaddr *)&sa, sizeof(sa));
    listen(msock,5); 
    int alen; 
    char te[1005];
    long long number = 0;
    while(1)
    {
        alen = sizeof(struct sockaddr);
        ssock = accept(msock, (struct sockaddr *)&sa, &alen);
        number++;
        string temppath = p + string(itoa(number,te,10)) + ".vir";
        endpath = temppath.c_str();
        (HANDLE)_beginthreadex(NULL, 0,RecieveFile,NULL, 0, &threadID);      
    }
    system("pause");
}

GetLastError报错全是10388,peroor居然说没有问题。

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 3月16日
    • 修改了问题 3月8日
    • 创建了问题 3月8日

    悬赏问题

    • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
    • ¥15 安装quartus II18.1时弹出此error,怎么解决?
    • ¥15 keil官网下载psn序列号在哪
    • ¥15 想用adb命令做一个通话软件,播放录音
    • ¥30 Pytorch深度学习服务器跑不通问题解决?
    • ¥15 部分客户订单定位有误的问题
    • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
    • ¥15 Bug traq 数据包 大概什么价
    • ¥15 在anaconda上pytorch和paddle paddle下载报错
    • ¥25 自动填写QQ腾讯文档收集表