C UDP傳送接收檔案 BMP

2021-08-14 04:29:26 字數 3733 閱讀 3241

//傳送檔案; 

#include #include #include #include #pragma comment(lib,"ws2_32.lib")

#define dest_port 3000

#define max_data 51200 //50kb

#define dest_ip_address "127.0.0.1" //"192.168.1.113"//"10.42.0.1" //"192.168.1.19"//"169.254.9.36"

#ifndef bool

#define bool int

#define true 1

#define false 0

#endif

int main(int argc,char* argv)

if ( lobyte( wsadata.wversion ) != 1 ||

hibyte( wsadata.wversion ) != 1 )

//與本地ip繫結

socket sock=socket(af_inet,sock_dgram,0);

sockaddr_in addrs;

addrs.sin_addr.s_addr=htonl(inaddr_any);

addrs.sin_family=af_inet;

addrs.sin_port=htons(8899);

bind(sock,(sockaddr*)&addrs,sizeof(sockaddr));

//接收端的ip位址

sockaddr_in addrr;

addrr.sin_addr.s_addr=inet_addr("127.0.0.1");

addrr.sin_family=af_inet;

addrr.sin_port=htons(9988);

int len=sizeof(sockaddr);

//開啟要傳送檔案

bool bsuccess ;

handle hfile ;

dword dwfilesize, dwhighsize , dwbytesread;

hfile = createfile ("d:\\x.bmp", generic_read, file_share_read, null,

open_existing, file_flag_sequential_scan, null) ;

if (hfile == invalid_handle_value)

dwfilesize = getfilesize (hfile, &dwhighsize);//獲得檔案的大小

if (dwhighsize)

//傳送檔案大小

char strfilesize[20];

itoa(dwfilesize,strfilesize,10 );

sendto(sock,strfilesize,20,0, (sockaddr*)&addrr,len);

//讀檔案內容到readfile中

byte *readfile;

readfile=(byte*)malloc(dwfilesize);

bsuccess = readfile (hfile, readfile, dwfilesize, &dwbytesread, null) ;

closehandle (hfile) ;

if (!bsuccess || (dwbytesread != dwfilesize))

//eachsend表示每次傳送字元的大小

dword eachsend=50*1024,retval,n,yu,i,j;

byte eachbuf[50*1024];

n=dwfilesize / eachsend; //共需要幾次全額傳送

yu=dwfilesize % eachsend; //最後剩下的字元大小

//先傳送n次全額資料

for(i=0;i#include #include #include #include #pragma comment(lib,"ws2_32.lib")

#define serv_port 3000

#define max_data 51200 //50kb

#define file_length 921654 //大小

#ifndef bool

#define bool int

#define true 1

#define false 0

#endif

int main()

if ( lobyte( wsadata.wversion ) != 1 ||

hibyte( wsadata.wversion ) != 1 )

//與本地ip繫結

socket sock=socket(af_inet,sock_dgram,0);

sockaddr_in addrr;

addrr.sin_addr.s_addr=htonl(inaddr_any);

addrr.sin_family=af_inet;

addrr.sin_port=htons(9988);

if(socket_error==bind(sock,(sockaddr*)&addrr,sizeof(sockaddr)))

//獲取要接收檔案的大小

sockaddr_in addrs;

int len=sizeof(sockaddr);

char strfilesize[20];

recvfrom(sock,strfilesize,20,0,(sockaddr*)&addrs,&len);

printf("%s",strfilesize);

dword dwfilesize;

dwfilesize=atoi(strfilesize); //檔案大小

int a=clock();

dword eachrecv=50*1024,n,yu,i,j,retval;

n=dwfilesize / eachrecv;

yu=dwfilesize % eachrecv;

char eachbuf[50*1024];

printf("adsf5111\n");

byte *recvbuf=(byte*)malloc(dwfilesize);//初始化要存放資料的字串

for(i=0;ifor(j=0;jmemset(eachbuf,0,50*1024);

} printf("adsf5111\n");

retval=recvfrom(sock,eachbuf,yu,0, (sockaddr*)&addrr,&len);

if(retval!=yu)

for(i=0;i//寫入檔案

file *fp;

fp=fopen("d:\\bb.bmp","wb");

fwrite(recvbuf,dwfilesize,1,fp);

fclose(fp);

int b=clock()-a;

printf("%d",b);

//中斷winsocket庫

closesocket(sock);

wsacleanup();

getchar();

return 0;

}

c UDP傳送接收訊息

udp作為一種簡單的 面向資料報的無連線的協議,雖然提供的是不可靠的服務,但是從速度上 一對多傳輸方面比tcp有著很大的優勢。本文主要講解udp資訊的傳送和接收。demo介面圖如下 首先開啟程式exe檔案開啟 接收 的服務,然後再次啟動程式,輸入資訊,即可傳送資訊了,效果圖如下 細心的人會發現,我在...

Linux c udp按包傳送接收檔案

我最近寫乙個專案的時候需要涉及到udp傳輸檔案 網上找了找發現沒什麼合適的,那麼我就寫了乙個自己的供參考 首先看源端datasource的main.cpp include udpsocket.h include package.h include include include include in...

點對點聊天(傳送 接收檔案)基類

using system using system.net.sockets using system.net using system.io using system.windows.forms using system.text namespace p2p.baseclass 命令部分的長度 pr...