Linux c udp按包傳送接收檔案

2021-10-13 20:33:38 字數 3085 閱讀 2971

我最近寫乙個專案的時候需要涉及到udp傳輸檔案.網上找了找發現沒什麼合適的,那麼我就寫了乙個自己的供參考.

首先看源端datasource的main.cpp:

#include "udpsocket.h"

#include "package.h"

#include #include #include #include #include #include #include using namespace std;

//傳輸二進位制檔案的函式

void sendbinfile()

int count = 1;

//需要一直讀取到檔案結束,注意這裡不是按行讀取,是按長度讀取

while (!in.eof())

else

char sendbuffer[1500];

memcpy(sendbuffer, &datapackage, sizeof(sendbuffer));

udpsocket.sendbuf(sendbuffer, sizeof(sendbuffer), dstip, dstport);

if(datapackage.end == 1)

count++;

}udpsocket.close();

}//傳輸文字檔案的函式

void sendtextfile()

datapackage.data[i] = '\0';

string contentname = "pku/eecs/file/" + file1 + "/segment" + to_string(count);

strcpy(datapackage.contentname, contentname.c_str());

datapackage.datasize = i + 2;

datapackage.segmentnum = count;

//如果已經讀到了最後一行,那麼加上標誌位

if(in.eof())

else

char sendbuffer[1500];

memcpy(sendbuffer, &datapackage, sizeof(sendbuffer));

udpsocket.sendbuf(sendbuffer, sizeof(sendbuffer), dstip, dstport);

count++;

}udpsocket.close();

}int main()

接收端是對應的:

#include "udpsocket.h"

#include "package.h"

#include #include #include #include #include #include #include using namespace std;

//接收二進位制檔案

void receivebinfile(char* filename)

datapackage datapackage;

memcpy(&datapackage, recvbuf, sizeof(datapackage));

outfile.write(datapackage.data, datapackage.datasize);

//判斷是不是最後乙個

if(datapackage.end == 1) break;

}udpsocket.close();

outfile.close();

}//接收文字檔案

void receivetextfile(char* filename)

datapackage datapackage;

memcpy(&datapackage, recvbuf, sizeof(datapackage));

outfile << datapackage.data << endl;

//判斷是不是最後一行

if(datapackage.end == 1) break;

}udpsocket.close();

outfile.close();

}int main()

除了上面兩個收發核心**之外,我定義了傳輸資料報的格式,以及自己封裝了udp socket供呼叫

package.h

#ifndef __package_h__

#define __package_h__

#include #include using namespace std;

struct datapackage

datapackage(){}

bool operator==(const datapackage rhs) const

bool operator < (const datapackage rhs) const

};#endif

以及封裝的udp socket

udpsocket.h

#pragma once

#ifndef udpsocket_h

#define udpsocket_h

#include #include #include #include #include#include#include#include#include#include#includeusing std::string;

class udpsocket

;#endif

udpsocket.cpp

#include"udpsocket.h"

#include//#includeudpsocket::udpsocket()

udpsocket::~udpsocket()

int udpsocket::create()

return recvsize;

}int udpsocket::close()

這樣寫了makefile之後,收發兩端都把datapackage.h udpsocket.h udpsocket.cpp 包括進去,編譯執行即可,即可實現發端讀取檔案並按照包的形式udp傳送,收端接收到包儲存即可.

websocket傳送接收協議

一.websocket 接收資料 1 固定位元組 1000 0001 或1000 0010 區分是否是資料報的乙個固定 位元組 佔1個位元組 2 包長度位元組,第 1位是1,剩下 7為得到乙個整數 0,127 125 以內的長度直接表示就可以了 126表示後面兩個位元組表示大小 127 表示後面的 ...

C tcpClient傳送和接收

先做乙個簡單的tcpclient收發功能。先簡單做乙個介面。引入命名空間 using system.net.sockets using system.net 其中定義了三個按鈕,分別是建立連線,接收和傳送。c 中的tcp通訊實質就是socket通訊。private void button1 clic...

python tcp 傳送和接收

import socket def main 1.建立tcp的套接字 tcp socket socket.socket socket.af inet,socket.sock stream 2.鏈結伺服器 tcp socket.connect 192.168.33.11 7890 server ip ...