用winsock传送二进制文件

发送代码

Public Function outFiles(filePath As String)

    Dim outFile() As Byte

    Dim outPath As String

    Dim outFileLen As Double

    Dim outFileStar As Double

    Dim lngN As Double

    Dim outN As Double

    Dim outFree As Long

    Dim i As Long

   

    '检查是否与服务器连接

    If wskCPost.State = 7 Then

        outPath = filePath

   

        outFileLen = FileLen(outPath)

        outN = outFileLen / 7000 + 1

       

        objJD.Max = outN

        dblJD = 0

        objJD.Value = 0

   

        For i = 0 To outN - 1

            objJD.Value = i

            If i = outN - 1 Then

                lngN = outFileLen - outFileStar +   1

            Else

                lngN = 7000

            End If

 

            ReDim outFile(1 To lngN)

            If outFileStar = 0 Then outFileStar = 1

            outFree = FreeFile

            Open outPath For Binary As #outFree

            Get #outFree, outFileStar, outFile

            Close #outFree

            outFileStar = outFileStar + UBound(outFile)

 

            wskCPost.SendData outFile

            DoEvents

        Next

    End If

       

End Function

接收代码

‘-----------------------------------------------------------------------------------------------------'接收二进制文件

            myPath = VB.App.Path & "/tmpFiles/" & listenN(index).fileName

            ReDim inFile(bytestotal)

            wskSPost(index).GetData inFile, vbArray + vbByte

 

            myFree = FreeFile

            Open myPath For Binary As #myFree  '新建或打开文件

            '将收到的数据写入新文件中

            listenN(index).infileLen = fileLen(myPath) + 1

            Put #myFree, listenN(index).infileLen, inFile

            Close #myFree                                  '关闭

            '记录文件长度

 

            If fileLen(myPath) + 1 >= listenN(index).fileLen Then

                '接收完成,将接收类型改为字符型

                listenN(index).fileLX = 0

                listenN(index).fileLen = 0

                listenN(index).infileLen = 0

                wskSPost(index).SendData "endf"  '文件接收完毕,向客户端发送确认

            End If

‘----------------------------------------------------------------------------------------------------

 
要在Windows上使用C++发送二进制文件,你可以使用Winsock库来处理TCP连接。以下是一个简单的示例代码,演示了如何发送二进制文件: ```cpp #include <iostream> #include <fstream> #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") #define MAX_BUFFER_SIZE 4096 int main() { // 初始化Winsock库 WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { std::cerr << "Failed to initialize winsock" << std::endl; return 1; } // 创建套接字 SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0); if (clientSocket == INVALID_SOCKET) { std::cerr << "Failed to create socket" << std::endl; WSACleanup(); return 1; } // 连接到服务器 sockaddr_in serverAddress; serverAddress.sin_family = AF_INET; serverAddress.sin_port = htons(1234); // 设置服务器端口 serverAddress.sin_addr.s_addr = inet_addr("127.0.0.1"); // 设置服务器IP地址 if (connect(clientSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) == SOCKET_ERROR) { std::cerr << "Failed to connect to server" << std::endl; closesocket(clientSocket); WSACleanup(); return 1; } // 打开要发送的二进制文件 std::ifstream file("file.bin", std::ios::binary); if (!file) { std::cerr << "Failed to open file" << std::endl; closesocket(clientSocket); WSACleanup(); return 1; } // 读取文件内容并发送 char buffer[MAX_BUFFER_SIZE]; while (!file.eof()) { file.read(buffer, MAX_BUFFER_SIZE); int bytesRead = file.gcount(); send(clientSocket, buffer, bytesRead, 0); } // 关闭套接字和文件 file.close(); closesocket(clientSocket); WSACleanup(); std::cout << "File sent successfully" << std::endl; return 0; } ``` 在代码中,你需要将服务器的IP地址和端口号更改为你实际使用的值。你还需要将要发送的二进制文件命名为"file.bin",并确保它位于你的可执行文件所在的目录中。 这段代码使用std::ifstream打开并读取二进制文件,然后使用send函数将文件内容发送到服务器。你可以根据需要进行修改和扩展。记得在完成后关闭套接字和清理Winsock库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值