linuxudp發送
Ⅰ 我的linux伺服器成肉雞了,向同一ip地址發送大量的udp包,把我的伺服器資源都消耗光了,怎麼解決,
1連上伺服器 找出發包進程kill掉(這一步做不到可以無視)
2數據備份(有重要數據的話)
3重做系統
4還原數據
5做好安全防護(iptables禁用不用的埠,不需要的服務關閉,升級bash最近有漏洞)
Ⅱ linux上UDP單次發送大小限制是多少
你好,方法一 數據線連接電腦,在開始-----設置-----連接------usb連接pc上選擇activesync與outlook同步這樣可用用電腦的網路上網。前提,電腦上也要裝上activesync軟體,且電腦可上網。win7好像自帶的,就不用裝了,xp系統要裝的。
方法二 wifi連接。 前提,附近能搜到wifi信號,而且是木有密碼的,免費的。開始------設置----連接-----WLAN 打開wifi搜到信號連接後,就可用,范圍一般幾十米,幾百米的,主要看信號強度,有顯示的
Ⅲ 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;
}
Ⅳ linux 下udp收發包的並發數上限是多少
UDP本來就是無連接無狀態,不管是否發送成功的,網路狀況越好自然越容易成功,10萬級別的數據包,丟包嚴重是很正常的啊,要是很大量數據的話,就做UDP打洞唄,減少伺服器壓力唄
Ⅳ Linux客戶端和Window伺服器端udp socket通信不能成功
上面代碼沒問題,用Linux虛擬機和window調試時,不能選用Bridge方式,改用NAT方式即可。
因為系統環境不同,這樣慢慢地很容易就找到問題出在哪裡,打個比方?觸發了裡面有什麼內容,它發送一條消息少年。這類問題(是打比方,精確到埠,語言不同。列印出來看,一步一步排查就行,不限於這一個問題)
另外的可能就是linux客戶端上的代碼運行機制問題。
首先要100%確定客戶端的消息到了伺服器端,代碼上的表現可能也不同,有沒有表示什麼時候發完,這一類;
然後這時從伺服器端代碼接受消息的入口也就是第一行開始單步調試,是否觸發了伺服器的監聽函數。也就是結束符,伺服器可能一直在等單條消息的結束
Ⅵ linux內核驅動程序怎麼發udp數據包
socket編程只有三種方式TCP、UDP、和RAW。既然你已經知道不是TCP、UDP之類的,那一定就是RAW了,不過RAW是需要root滴...
Ⅶ linux怎麼使用nc命令來發送一串使用udp協議的數據或者不是NC也可以的命令
echo -n 「foo" | nc -4u -w1 <host> <udp port>
或者
echo -n "hello" >/dev/udp/localhost/8000
Ⅷ Linux下用udp的sendto函數發數據包的問題
沒碰到過,可能是sendto的目的地參數非法吧?
Ⅸ 請教Linux關於UDP最大緩沖區設置
1. tcp 收發緩沖區默認值
[root@ www.linuxidc.com]# cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 4161536
87380 :tcp接收緩沖區的默認值
[root@ www.linuxidc.com]# cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 4161536
16384 : tcp 發送緩沖區的默認值
2. tcp 或udp收發緩沖區最大值
[root@ www.linuxidc.com]# cat /proc/sys/net/core/rmem_max
131071
131071:tcp 或 udp 接收緩沖區最大可設置值的一半。
也就是說調用 setsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen); 時rcv_size 如果超過 131071,那麼
getsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen); 去到的值就等於 131071 * 2 = 262142
[root@ www.linuxidc.com]# cat /proc/sys/net/core/wmem_max
131071
131071:tcp 或 udp 發送緩沖區最大可設置值得一半。
跟上面同一個道理
3. udp收發緩沖區默認值
[root@ www.linuxidc.com]# cat /proc/sys/net/core/rmem_default
111616:udp接收緩沖區的默認值
[root@ www.linuxidc.com]# cat /proc/sys/net/core/wmem_default
111616
111616:udp發送緩沖區的默認值
4. tcp 或udp收發緩沖區最小值
tcp 或udp接收緩沖區的最小值為 256 bytes,由內核的宏決定;
tcp 或udp發送緩沖區的最小值為 2048 bytes,由內核的宏決定
Ⅹ linux udp 埠復用問題! 求教!
int reuse = 1;
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&reuse);//設置套接字屬性為重用bind地址,
