導航:首頁 > 文件類型 > linuxudp傳輸文件

linuxudp傳輸文件

發布時間:2023-06-12 13:01:09

㈠ 如何做linux下udp大文件傳輸

拆分成小塊如2K一塊,每個塊發送成功繼續下一個,不成功重新發

㈡ 求教linux向指定目標機器發一個udp包,應該怎麼發呢

用iperf命令
#iperf -u -c 10.32.0.254
-u 就是以udp包發送
-c 就是目標機器ip

㈢ 怎樣在Linux下每分鍾發送一個特定的Udp數據包

tcpmp udp | grep 200

㈣ linux怎麼使用nc命令來發送一串使用udp協議的數據或者不是NC也可以的命令

echo -n 「foo" | nc -4u -w1 <host> <udp port>
或者
echo -n "hello" >/dev/udp/localhost/8000

㈤ linux udp 如何發數據包 我要發送一個5M左右的數據,如何實現分片發送 或者分包發送

這個- - 肯定得自定義私有報文頭,然後組裝了。
感覺樓主好像還是新手,很難簡單講清楚啊回。

我們說答說比如某個下載軟體的udp私有協議,裡面還設計了udp層的3次握手,丟包請求等等。
如果你不考慮丟包,不考慮身份驗證,假設全部能收到,那麼肯定也得設計一個順序欄位。

報文頭(標志、序號)
把數據分割更1024位元組的小段,每個小段都帶著報文頭出去,
接收端收到後,根據報文頭的序號,剔除掉報文頭,把後面每個小段的內容重新組合成5m的時間數據。

不知道你聽明白了沒有- - 如果有編程基礎,實際編程中,不用講自己就明白了,如果沒有基礎,的確挺難說明白的

㈥ linux 應用層用udp發送數據時有大小限制嗎

從理論上來說,UDP數據的總長度為 65535(IP最大長度)-20(IP頭)-8(UDP頭) = 65507個位元組,但大多數系統都達不到這個長度。這一般是受到兩個方面的因素限制:
1) 應用程序編程介面限制。一般socket的緩沖區大小是8K,但都提供API來設置緩沖區的大小(SetSockOpt)。一般發送UDP最好不要超過512位元組,這樣基本可以保證不丟包(因為大部分網路和主機的MTU都大於512).
2) TCP/IP內核的限制。可能存在一些實現特性使得IP長度不能達到65535。

由於IP能夠發送或接收特定長度的數據報並不意味著接收應用程序可以讀取該長度的數據。因此,UDP編程介面允許應用程序指定每次返回的最大位元組數。如果接收到的數據報長度大於應用程序所能處理的長度,那麼會發生什麼情況呢?典型的Berkeley版socket API對數據報進行截斷,並丟棄任何多餘的數據;SVR4下的socket API(包括Solaris 2.x) 並不截斷數據報。超出部分數據在後面的讀取中返回。它也不通知應用程序從單個UDP數據報中多次進行讀取操作;TLI API不丟棄數據。相反,它返回一個標志表明可以獲得更多的數據,而應用程序後面的讀操作將返回數據報的其餘部分。

UDP不會分片,分片是IP層做的事,而且分片重組也是IP層負責的。
如果用UDP發送數據,數據量最好不要太大,應該避免IP層和鏈路層分包,防止分片丟失,導致整個UDP數據包丟失。

㈦ windows下的udp協議如何與linux下的udp協議連接,傳送數據

udp和操作系統沒有關系。
至於埠怎麼打開,數據怎麼發送和接受,和對數據進行怎麼樣的處理,是你雙端自己所寫程序決定的。

㈧ linux c語言實現,udp協議

UDP協議全稱是用戶數據報協議,在網路中它與TCP協議一樣用於處理數據包,是一版種無連接的協議。在OSI模型中權,在第四層--傳輸層,處於IP協議的上一層。UDP有不提供數據包分組、組裝和不能對數據包進行排序的缺點,也就是說,當報文發送之後,是無法得知其是否安全完整到達的。UDP用來支持那些需要在計算機之間傳輸數據的網路應用。包括網路視頻會議系統在內的眾多的客戶/伺服器模式的網路應用都需要使用UDP協議。UDP協議從問世至今已經被使用了很多年,雖然其最初的光彩已經被一些類似協議所掩蓋,但是即使是在今天UDP仍然不失為一項非常實用和可行的網路傳輸層協議。

㈨ linux下udp實現文件的傳輸,盡量詳細點 思路我知道 就是不知道怎麼把文件名給傳過去

傳文件最好用個TCP。UDP會丟包的

////////////////////////////////////
//客戶端代碼
///////////////////////////////////

//本文件是客戶機的代碼
#include <netinet/in.h> // for sockaddr_in
#include <sys/types.h> // for socket
#include <sys/socket.h> // for socket
#include <stdio.h> // for printf
#include <stdlib.h> // for exit
#include <string.h> // for bzero
#include <time.h> //for time_t and time
#include <arpa/inet.h>

#define HELLO_WORLD_SERVER_PORT 7754
#define BUFFER_SIZE 1024

int main(int argc, char **argv)
{
if (argc != 2)
{
printf("Usage: ./%s ServerIPAddress\n",argv[0]);
exit(1);
}

//time_t now;
FILE *stream;

//設置一個socket地址結構client_addr,代表客戶機internet地址, 埠
struct sockaddr_in client_addr;
bzero(&client_addr,sizeof(client_addr)); //把一段內存區的內容全部設置為0
client_addr.sin_family = AF_INET; //internet協議族
client_addr.sin_addr.s_addr = htons(INADDR_ANY);//INADDR_ANY表示自動獲取本機地址
client_addr.sin_port = htons(0); //0表示讓系統自動分配一個空閑埠
//創建用於internet的流協議(TCP)socket,用client_socket代表客戶機socket
int client_socket = socket(AF_INET,SOCK_STREAM,0);
if( client_socket < 0)
{
printf("Create Socket Failed!\n");
exit(1);
}
//把客戶機的socket和客戶機的socket地址結構聯系起來
if( bind(client_socket,(struct sockaddr*)&client_addr,sizeof(client_addr)))
{
printf("Client Bind Port Failed!\n");
exit(1);
}

//設置一個socket地址結構server_addr,代表伺服器的internet地址, 埠
struct sockaddr_in server_addr;
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family = AF_INET;
if(inet_aton(argv[1],&server_addr.sin_addr) == 0) //伺服器的IP地址來自程序的參數
{
printf("Server IP Address Error!\n");
exit(1);
}
server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT);
socklen_t server_addr_length = sizeof(server_addr);
//向伺服器發起連接,連接成功後client_socket代表了客戶機和伺服器的一個socket連接
if(connect(client_socket,(struct sockaddr*)&server_addr, server_addr_length) < 0)
{
printf("Can Not Connect To %s!\n",argv[1]);
exit(1);
}

char buffer[BUFFER_SIZE];
bzero(buffer,BUFFER_SIZE);

//從伺服器接收數據到buffer中
int length = recv(client_socket,buffer,BUFFER_SIZE,0);

if(length < 0)
{
printf("Recieve Data From Server %s Failed!\n", argv[1]);
exit(1);
}

printf("\n%s\n",buffer);

bzero(buffer,BUFFER_SIZE);

bzero(buffer,BUFFER_SIZE);
strcpy(buffer,"Hello, World! From Client\n");
//向伺服器發送buffer中的數據
send(client_socket,buffer,BUFFER_SIZE,0);

if((stream = fopen("data","w+t"))==NULL)
{
printf("The file 'data' was not opened! \n");
}

else
bzero(buffer,BUFFER_SIZE);
length = 0;
while( length = recv(client_socket,buffer,BUFFER_SIZE,0))
{
if(length < 0)
{
printf("Recieve Data From Server %s Failed!\n", argv[1]);
break;
}

int write_length = fwrite(buffer,sizeof(char),length,stream);
if (write_length<length)
{
printf("File is Write Failed\n");
break;
}
bzero(buffer,BUFFER_SIZE);
}
printf("Recieve File From Server[%s] Finished\n", argv[1]);

//關閉 文件
fclose(stream);

//關閉socket
close(client_socket);
return 0;
}

////////////////////////////////////
//伺服器代碼
///////////////////////////////////
//本文件是伺服器的代碼
#include <netinet/in.h> // for sockaddr_in
#include <sys/types.h> // for socket
#include <sys/socket.h> // for socket
#include <stdio.h> // for printf
#include <stdlib.h> // for exit
#include <string.h> // for bzero
#include <time.h> //for time_t and time

#define HELLO_WORLD_SERVER_PORT 7754
#define LENGTH_OF_LISTEN_QUEUE 20
#define BUFFER_SIZE 1024

int main(int argc, char **argv)
{
//設置一個socket地址結構server_addr,代表伺服器internet地址, 埠
struct sockaddr_in server_addr;
bzero(&server_addr,sizeof(server_addr)); //把一段內存區的內容全部設置為0
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htons(INADDR_ANY);
server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT);
// time_t now;
FILE *stream;

//創建用於internet的流協議(TCP)socket,用server_socket代表伺服器socket
int server_socket = socket(AF_INET,SOCK_STREAM,0);
if( server_socket < 0)
{
printf("Create Socket Failed!");
exit(1);
}

//把socket和socket地址結構聯系起來
if( bind(server_socket,(struct sockaddr*)&server_addr,sizeof(server_addr)))
{
printf("Server Bind Port : %d Failed!", HELLO_WORLD_SERVER_PORT);
exit(1);
}

//server_socket用於監聽
if ( listen(server_socket, LENGTH_OF_LISTEN_QUEUE) )
{
printf("Server Listen Failed!");
exit(1);
}

while (1) //伺服器端要一直運行
{

struct sockaddr_in client_addr;
socklen_t length = sizeof(client_addr);

int new_server_socket = accept(server_socket,(struct sockaddr*)&client_addr,&length);
if ( new_server_socket < 0)
{
printf("Server Accept Failed!\n");
break;
}

char buffer[BUFFER_SIZE];
bzero(buffer, BUFFER_SIZE);

strcpy(buffer,"Hello,World! 從伺服器來!");
strcat(buffer,"\n"); //C語言字元串連接

send(new_server_socket,buffer,BUFFER_SIZE,0);

bzero(buffer,BUFFER_SIZE);
//接收客戶端發送來的信息到buffer中
length = recv(new_server_socket,buffer,BUFFER_SIZE,0);

if (length < 0)
{
printf("Server Recieve Data Failed!\n");
exit(1);
}
printf("\n%s",buffer);

if((stream = fopen("/home/administrator/110405A000.jpg","r"))==NULL)
{
printf("The file 'data1' was not opened! \n");
exit(1);
}
else

printf("The file 'filename' was opened! \n");
bzero(buffer,BUFFER_SIZE);

int lengsize = 0;
while((lengsize = fread(buffer,1,1024,stream)) > 0)
{

printf("lengsize = %d\n",lengsize);

if(send(new_server_socket,buffer,lengsize,0)<0)
{
printf("Send File is Failed\n");
break;
}

bzero(buffer, BUFFER_SIZE);

}
if(fclose(stream))
printf("The file 'data' was not closed! \n");
exit(1);

//關閉與客戶端的連接
close(new_server_socket);
}
//關閉監聽用的socket
close(server_socket);
return 0;
}

閱讀全文

與linuxudp傳輸文件相關的資料

熱點內容
文件夾能容納多少張截圖 瀏覽:85
視頻文件查找 瀏覽:786
如何進入java的編程界面 瀏覽:371
二級開發者還有哪些app 瀏覽:241
app充值請聯系itunes 瀏覽:678
矢量app和cdr哪個好 瀏覽:85
系統文件壞了如何修復 瀏覽:20
鍵盤系統文件誤刪 瀏覽:738
白金英雄壇所有版本 瀏覽:842
ps文件轉hsj 瀏覽:382
哪個網站電影 瀏覽:490
ps4游戲文件格式名稱 瀏覽:290
caxa教程2007 瀏覽:832
新點是什麼小說網站 瀏覽:753
魔獸世界冰封王座3版本轉換器 瀏覽:418
蘋果3dtouch軟體 瀏覽:979
qq視頻在哪個文件夾裡面 瀏覽:740
請帖製作網站java源碼 瀏覽:257
自己的網站怎麼做兼職 瀏覽:608
醫院基礎數據是什麼 瀏覽:744

友情鏈接