我制作了一个应该传输文件的服务器和客户端。我试图让它读取整个文件并发送它。但现在我看到了,我遇到了问题。服务器应在客户端连接时自动发送文件。但是文件是空的,不知道问题出在哪里你可以看到我正在尝试发送.txt文件。但我想将来发送一个大文件,但不大于 1MB。)
编辑:
图片在这里:http: //img819.imageshack.us/img819/8259/aadi.jpg
- 左侧:我尝试发送的文件。
 - 右侧:我收到的文件
 

问题:我收到的文件已损坏,无法使用。
服务器:
#include <WinSock2.h>
#include <Windows.h>
#include <stdio.h>
#include <iostream>
using namespace std;
#pragma comment(lib, "Ws2_32.lib")
#define Port 6000
SOCKET Socket, Sub;
WSADATA Winsock;
sockaddr_in Addr;
sockaddr_in IncomingAddress;
int AddressLen = sizeof(IncomingAddress);
int main()
{
    WSAStartup(MAKEWORD(2, 2), &Winsock);    // Start Winsock
    if(LOBYTE(Winsock.wVersion) != 2 || HIBYTE(Winsock.wVersion) != 2)    // Check version
    {
        WSACleanup();
        return 0;
    }
    Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    ZeroMemory(&Addr, sizeof(Addr));
    Addr.sin_family = AF_INET;
    Addr.sin_port = htons(Port);  
    bind(Socket, (sockaddr*)&Addr, sizeof(Addr));
    if(listen(Socket, 1) == SOCKET_ERROR)
    {
        printf("listening error\n");
    }
    else
    {
        printf("listening ok\n");
    }
    if(Sub = accept(Socket, (sockaddr*)&IncomingAddress, &AddressLen))
    {
        char *ClientIP = inet_ntoa(IncomingAddress.sin_addr);
        int ClientPort = ntohs(IncomingAddress.sin_port);
        printf("Client conncted!\n");
        printf("IP: %s:%d\n", ClientIP, ClientPort);
        printf("Sending file .. \n");
        FILE *File;
        char *Buffer;
        unsigned long Size;
        File = fopen("C:\\Prog.rar", "rb");
        if(!File)
        {
            printf("Error while readaing the file\n");
            getchar();
            return 0;
        }
        fseek(File, 0, SEEK_END);
        Size = ftell(File);
        fseek(File, 0, SEEK_SET);
        Buffer = new char[Size];
        fread(Buffer, Size, 1, File);
        char cSize[MAX_PATH];
        sprintf(cSize, "%i", Size);
        fclose(File);
        send(Sub, cSize, MAX_PATH, 0); // File size
        //int len = Size;
        //char *data = Buffer;
        int Offset = 0;
        while(Size > Offset)
        {
            int Amount = send(Sub, Buffer + Offset, Size - Offset, 0);
            if(Amount <= 0)
            {
                cout << "Error: " << WSAGetLastError() << endl;
                break;
            }
            else
            {
                Offset += Amount;
                printf("2\n");
            }
        }
        free(Buffer);
        closesocket(Sub);
        closesocket(Socket);
        WSACleanup();
    }
    getchar();
    return 0;
}
客户:
#include <WinSock2.h>
#include <Windows.h>
#include <stdio.h>
#include <iostream>
using namespace std;
#pragma comment(lib, "Ws2_32.lib")
SOCKET Socket;
WSADATA Winsock;
sockaddr_in Addr;
int Addrlen = sizeof(Addr);
int main()
{
    WSAStartup(MAKEWORD(2, 2), &Winsock);    // Start Winsock
    if(LOBYTE(Winsock.wVersion) != 2 || HIBYTE(Winsock.wVersion) != 2)    // Check version
    {
        WSACleanup();
        return 0;
    }
     Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    ZeroMemory(&Addr, sizeof(Addr));    // clear the struct
    Addr.sin_family = AF_INET;    // set the address family
    Addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    Addr.sin_port = htons(6000);    // set the port
    if(connect(Socket, (sockaddr*)&Addr, sizeof(Addr)) < 0)
    {
        printf("Connection failed !\n");
        getchar();
        return 0;
    }
    printf("Connection successful !\n");
    printf("Receiving file .. \n");
    int Size;
    char *Filesize = new char[1024];
    if(recv(Socket, Filesize, 1024, 0)) // File size
    {
        Size = atoi((const char*)Filesize);
        printf("File size: %d\n", Size);
    }
    char *Buffer = new char[Size];
    //int len = Size;
    //char *data = Buffer;
    int Offset = 0;
    while(Size > Offset)
    {
        int Amount = recv(Socket, Buffer + Offset, Size - Offset, 0);
        if(Amount <= 0)
        {
            cout << "Error: " << WSAGetLastError() << endl;
            break;
        }
        else
        {
            Offset += Amount;
            printf("2\n");
        }
    }
    FILE *File;
    File = fopen("Prog.rar", "wb");
    fwrite(Buffer, 1, Size, File);
    fclose(File);
    getchar();
    closesocket(Socket);
    WSACleanup();
    return 0;
}