導航:首頁 > 配伺服器 > 怎麼建立多個udp伺服器

怎麼建立多個udp伺服器

發布時間:2024-05-06 22:37:18

❶ 求教面向大規模連接的高並發網路模型,該如何處理

所謂並發伺服器就是在同一個時刻可以處理來自多個客戶端的請求;循環伺服器是指伺服器在同一時刻只可以響應一個客戶端的請求。而且對於TCP和UDP套接字,這兩種伺服器的實現方式也有不同的特點。
1、TCP循環伺服器:
首先TCP伺服器接受一個客戶端的連接請求,處理連接請求,在完成這個客戶端的所有請求後斷開連接,然後再接受下一個客戶端的請求。創建TCP循環伺服器的演算法如下:

復制代碼 代碼如下:
socket(……); //創建一個TCP套接字
bind(……); //邦定公認的埠號
listen(……); //傾聽客戶端連接
while(1) //開始循環接收客戶端連接
{
accept(……);//接收當前客戶端的連接
while(1)
{ //處理當前客戶端的請求
read(……);
process(……);
write(……);
}
close(……); //關閉當前客戶端的連接,准備接收下一個客戶端連接
}
TCP循環伺服器一次只處理一個客戶端的請求,如果有一個客戶端佔用伺服器不放時,其它的客戶機連接請求都得不到及時的響應。因此,TCP伺服器一般很少用循環伺服器模型的。
2、TCP並發伺服器:
並發伺服器的思想是每一個客戶端的請求並不由伺服器的主進程直接處理,而是伺服器主進程創建一個子進程來處理。創建TCP並發伺服器的演算法如下:

復制代碼 代碼如下:
socket(……); //創建一個TCP套接字
bind(……); //邦定公認的埠號
listen(……);//傾聽客戶端連接
while(1) //開始循環接收客戶端的接收
{
accept(……);//接收一個客戶端的連接
if(fork(……)==0) //創建子進程
{
while(1)
{ //子進程處理某個客戶端的連接
read(……);
process(……);
write(……);
}
close(……); //關閉子進程處理的客戶端連接
exit(……) ;//終止該子進程
}
close(……); //父進程關閉連接套接字描述符,准備接收下一個客戶端連接
}
TCP並發伺服器可以解決TCP循環伺服器客戶端獨占伺服器的情況。但同時也帶來了一個不小的問題,即響應客戶機的請求,伺服器要創建子進程來處理,而創建子進程是一種非常消耗資源的操作。
3、UDP循環伺服器:
UDP伺服器每次從套接字上讀取一個客戶端的數據報請求,處理接收到的UDP數據報,然後將結果返回給客戶機。創建UDP循環伺服器的演算法如下:
1 socket(……); //創建一個數據報類型的套接字 2 bind(……); //邦定公認的短口號 3 while(1) //開始接收客戶端的連接 4 { //接收和處理客戶端的UDP數據報 5 recvfrom(……); 6 process(……); 7 sendto(……);//准備接收下一個客戶機的數據報 8 }
消除行號
因為UDP是非面向連接的,沒有一個客戶端可以獨占伺服器。只要處理過程不是死循環,伺服器對於每一個客戶機的請求總是能夠處理的。
UDP循環伺服器在數據報流量過大時由於處理任務繁重可能造成客戶技數據報丟失,但是因為UDP協議本身不保證數據報可靠到達,所以UDP協議是允許丟失數據報的。
鑒於以上兩點,一般的UDP伺服器採用循環方式4、UDP並發伺服器把並發的概念應用UDP就得到了並發UDP伺服器,和並發TCP伺服器模型一樣是創建子進程來處理的。
創建UDP並發伺服器的演算法如下:

復制代碼 代碼如下:
socket(……); //創建一個數據報類型的套接字
bind(……); //邦定公認的短口號
while(1) //開始接收客戶端的連接
{ //接收和處理客戶端的UDP數據報
recvfrom(……);
if(fork(……)==0) //創建子進程
{
rocess(……);
sendto(……);
}
}
除非伺服器在處理客戶端的請求所用的時間比較長以外,人們實際上很少用這種UDP並發伺服器模型的。
4、多路復用I/O並發伺服器:
創建子進程會帶來系統資源的大量消耗,為了解決這個問題,採用多路復用I/O模型的並發伺服器。採用select函數創建多路復用I/O模型的並發伺服器的演算法如下:
初始化(socket,bind,listen);

復制代碼 代碼如下:
while(1)
{
設置監聽讀寫文件描述符(FD_*);
調用select;
如果是傾聽套接字就緒,說明一個新的連接請求建立
{
建立連接(accept);
加入到監聽文件描述符中去;
}
否則說明是一個已經連接過的描述符
{
進行操作(read或者write);
}
多路復用I/O可以解決資源限制問題,此模型實際上是將UDP循環模型用在了TCP上面。這也會帶了一些問題,如由於伺服器依次處理客戶的請求,所以可能導致友的客戶會等待很久。

❷ 我想問下如何在手機上建立一個伺服器,用Socket的方法如何實現。

TCP方式:
TCP協議客戶端實現:

//創建一個Socket對象,指定伺服器端的IP地址和埠號
Socketsocket=newSocket("192.168.1.104",4567);
//使用InputStream讀取硬碟上的文件,這里只是用文件當做信息源,可以讀取控制項用戶輸入信息
InputStreaminputStream=new
FileInputStream("f://file/words.txt");

//從Socket當中得到OutputStream

OutputStream outputStream=socket.getOutputStream();
bytebuffer[]=newbyte[4*1024];inttemp=0;

//將InputStream當中的數據取出,並寫入到OutputStream當中
while((temp=inputStream.read(buffer))!=-1)

5
{
outputStream.write(buffer,0,temp);}
outputStream.flush();}

TCP協議伺服器端實現:

//聲明一個ServerSocket對象
ServerSocketserverSocket=null;
try{

//創建一個ServerSocket對象,並讓這個Socket在4567埠監聽

serverSocket=newServerSocket(4567);

//調用ServerSocket的accept()方法,接受客戶端所發送的請求,
//如果客戶端沒有發送數據,那麼該線程就停滯不繼續

Socketsocket=serverSocket.accept();
//從Socket當中得到InputStream對象

InputStreaminputStream=socket.getInputStream();
bytebuffer[]=newbyte[1024*4];
inttemp=0;

//從InputStream當中讀取客戶端所發送的數據
while((temp=inputStream.read(buffer))!=-1)
{
System.out.println(newString(buffer,0,temp));}
}
catch(IOExceptione)
{

e.printStackTrace();}

serverSocket.close();
}

UDP方式
UDP的客戶端代碼實現如下:

public static void main(String[]args)
{
try{

//首先創建一個DatagramSocket對象

DatagramSocket socket=new DatagramSocket(4567);
//創建一個InetAddree

6

InetAddress serverAddress=InetAddress.getByName("192.168.1.104");

String str="hello";

//這是要傳輸的數據

byte data[]=str.getBytes();

//把傳輸內容分解成位元組

//創建一個DatagramPacket對象,並指定要講這個數據包發送到網
絡當中的哪個地址,以及埠號

DatagramPacket packet=new
DatagramPacket(data,data.length,serverAddress,4567);
//調用socket對象的send方法,發送數據
socket.send(packet);}
catch(Exceptione)
{

e.printStackTrace();}
}

UDP的服務端代碼實現如下:

//創建一個DatagramSocket對象,並指定監聽的埠號

DatagramSocket socket=new DatagramSocket(4567);
bytedata[]=newbyte[1024];
//創建一個空的DatagramPacket對象

DatagramPacket packet=new DatagramPacket(data,data.length);
//使用receive方法接收客戶端所發送的數據,
//如果客戶端沒有發送數據,該進程就停滯在這里

socket.receive(packet);

Stringresult=newString(packet.getData(),packet.getOffset(),
packet.getLength());

System.out.println("result--->"+result);

❸ 飢荒正版伺服器怎麼開服 飢荒steam版專用伺服器搭建方法

配置需求
Steam賬號內必須擁有Don't Starve Together,擁有DST即可建立多個獨立伺服器(Dedicated Server)。
獨立伺服器沒有使用DST游戲內建立伺服器的路由穿透技術,伺服器必須為游戲客戶端開放一個合適的埠,伺服器默認通信方式:UDP協議,埠號:10999。
建立一個穩定的獨立伺服器必須確保系統滿足以下要求:
網路上傳速度:8KB/玩家/秒。如果按照獨立伺服器最大人數為6人來換算,網路上傳速度必須達到50KB/秒或以上才能讓6個玩家同時進行游戲,當然網路上傳帶寬越大越好,較差的網路通信會導致連接獨立伺服器的玩家動作卡頓以及卡屏。
內存:大約65MB/玩家。如果按照獨立伺服器最大人數為6人來換算,可用內存大小必須達到500MB或以上才能讓6個玩家同時進行游戲。
CPU:官方網站沒有明確說明。
游戲運行庫:VCRedist_2008(x86),DST游戲根目錄文件夾內有,對著DST右鍵->屬性->本地文件->瀏覽本地文件
2.0-建服准備工作——獲取令牌
如果要建立一個向公眾開放的獨立伺服器,則必須要獲得伺服器令牌,這樣做的目的是能夠讓開發者關停違反了服務條款的伺服器。
根據以下步驟獲得令牌:
注意:所有符號及標點全部使用半形模式輸入。
運行Don't Starve Together。
點擊Play !。
按~(數字鍵1左邊的按鍵)開啟控制台輸入指令,再按一次關閉控制台,若還有控制台文字信息顯示在屏幕上按CTRL+L關閉。
如下圖在控制台內輸入指令:TheNet:GenerateServerToken()

閱讀全文

與怎麼建立多個udp伺服器相關的資料

熱點內容
單片機6502 瀏覽:765
自助洗車有什麼app 瀏覽:937
程序員離職率多少 瀏覽:322
程序員那麼可愛電視劇今天沒更新 瀏覽:337
我的世界地形演算法 瀏覽:343
台灣dns的伺服器地址雲空間 瀏覽:288
音樂噴泉軟體要什麼加密狗 瀏覽:501
androidhttpmime 瀏覽:774
威科夫操盤法pdf 瀏覽:981
演算法可以用圖表表示 瀏覽:949
山西太原php 瀏覽:274
常用cmd網路命令 瀏覽:677
hashmap7源碼分析 瀏覽:899
搜索引擎原理技術與系統pdf 瀏覽:362
運動估計演算法python 瀏覽:861
java正則1 瀏覽:539
redhatlinux最新 瀏覽:182
python字典編程詞彙 瀏覽:147
微信和伺服器如何通訊 瀏覽:13
百家號伺服器配置有什麼用 瀏覽:601