當前位置:首頁 » 雲伺服器 » 搭建udp伺服器流程

搭建udp伺服器流程

發布時間: 2022-03-15 02:16:28

⑴ UDP和Socket通信步驟

這是在網上找到的,希望對你有所幫助。
sockets(套接字)編程有三種,流式套接字(SOCK_STREAM),數據報套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);

WINDOWS環境下TCP/UDP編程步驟:

1. 基於TCP的socket編程是採用的流式套接字。

在這個程序中,將兩個工程添加到一個工作區。要鏈接一個ws2_32.lib的庫文件。

伺服器端編程的步驟:

1:載入套接字型檔,創建套接字(WSAStartup()/socket());

2:綁定套接字到一個IP地址和一個埠上(bind());

3:將套接字設置為監聽模式等待連接請求(listen());

4:請求到來後,接受連接請求,返回一個新的對應於此次連接的套接字(accept());

5:用返回的套接字和客戶端進行通信(send()/recv());

6:返回,等待另一連接請求;

7:關閉套接字,關閉載入的套接字型檔(closesocket()/WSACleanup())。

伺服器端代碼如下:

#include <stdio.h>

#include <Winsock2.h>

void main()

{

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );

if ( err != 0 ) {

return;

}

if ( LOBYTE( wsaData.wVersion ) != 1 ||

HIBYTE( wsaData.wVersion ) != 1 ) {

WSACleanup( );

return;

}

SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN addrSrv;

addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons(6000);

bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

listen(sockSrv,5);

SOCKADDR_IN addrClient;

int len=sizeof(SOCKADDR);

while(1)

{

SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);

char sendBuf[50];

sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));

send(sockConn,sendBuf,strlen(sendBuf)+1,0);

char recvBuf[50];

recv(sockConn,recvBuf,50,0);

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

closesocket(sockConn);

}

}

客戶端編程的步驟:

1:載入套接字型檔,創建套接字(WSAStartup()/socket());

2:向伺服器發出連接請求(connect());

3:和伺服器端進行通信(send()/recv());

4:關閉套接字,關閉載入的套接字型檔(closesocket()/WSACleanup())。

客戶端的代碼如下:

#include <stdio.h>

#include <Winsock2.h>

void main()

{

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );

if ( err != 0 ) {

return;

}

if ( LOBYTE( wsaData.wVersion ) != 1 ||

HIBYTE( wsaData.wVersion ) != 1 ) {

WSACleanup( );

return;

}

SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN addrSrv;

addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons(6000);

connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

char recvBuf[50];

recv(sockClient,recvBuf,50,0);

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

send(sockClient,"hello",strlen("hello")+1,0);

closesocket(sockClient);

WSACleanup();

}

2.基於UDP的socket編程是採用的數據報套接字。

在這個程序中,將兩個工程添加到一個工作區。同時還要鏈接一個ws2_32.lib的庫文件。

伺服器端編程的步驟:

1:載入套接字型檔,創建套接字(WSAStartup()/socket());

2:綁定套接字到一個IP地址和一個埠上(bind());

3:等待和接收數據(sendto()/recvfrom());

4:關閉套接字,關閉載入的套接字型檔(closesocket()/WSACleanup())。

伺服器端代碼如下:

#include <winsock2.h>

#include <stdio.h>

void main()

{

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );

if ( err != 0 )

{

return;

}

if ( LOBYTE( wsaData.wVersion ) != 1 ||

HIBYTE( wsaData.wVersion ) != 1 )

{

WSACleanup( );

return;

}

SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);

SOCKADDR_IN addrSrv;

addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons(7003);

bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

char recvBuf[50];

SOCKADDR addrClient;

int len=sizeof(SOCKADDR);

recvfrom(sockSrv,recvBuf,50,0,(SOCKADDR*)&addrClient,&len);

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

closesocket(sockSrv);

WSACleanup();

}

對於基於UDP的socket客戶端來說,要進行如下步驟:

1:創建一個套接字(socket);

2:向伺服器發送數據(sendto);

3:關閉套接字;

代碼如下:

#include <winsock2.h>

#include <stdio.h>

void main()

{

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD( 2, 2 );

err = WSAStartup( wVersionRequested, &wsaData );

if ( err != 0 ) {

return;

}

if ( LOBYTE( wsaData.wVersion ) != 2 ||

HIBYTE( wsaData.wVersion ) != 2 ) {

WSACleanup( );

return;

}

SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);

SOCKADDR_IN addrClient;

addrClient.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

addrClient.sin_family=AF_INET;

addrClient.sin_port=htons(8889);

SOCKADDR_IN addrSrv;

sendto(sockClient,"hi",3,0,(SOCKADDR*)&addrClient,sizeof(SOCKADDR));

}

LINUX環境下TCP/UDP編程步驟:

TCP編程步驟:

一. 服務端:

1.socket(int domain,int type,int protocol):建立套接字;

2 .bind(int sockid,struct sockaddr *addrp,socklen_t addrlen):把本機地址和埠跟上一步建立的socket綁定在一起;

3.listen(int sockid,int qsize):監聽某套接字;

4.fd=accept(int sockid,struct sockaddr *callerid,socklen_t *addrlenp):等待某套接字接收信息;

5.recv(int fd,void *buf,size_t nbytes,int flags):從套接字接收數據;

6.close(fd) 和close(sockid)

二.客戶端:

1. socket():建立套接字;

2.connect(int sockid,struct sockaddr *serv_addrp,socklen_t addrlen):連接到伺服器;

3. send(int sockfd,const void *buf,size_t nbytes,int flags):發送數據到伺服器.

4. close(sockid);

UDP編程步驟:

一,服務端:

1. socket():同上;

2. bind():同上;

3. recvfrom(int sockfd,void*buff,size_t nbytes,int flags,struct sockaddr*from,socklen_t*addrlen):在套接字口接收數據,並且記錄下接收到的數據來源;一定要注意這里的參數addrlen,它不僅是函數的輸出,也是函數的輸入!所以要在調用該函數之前對addrlen賦值sizeof(struct sockaddr)。否則返回的地址from將會出錯!

4. close(sockfd);

二. 客戶端:

1. socket();同上;

2. sendto(int sockfd,const void*buff,size_t nbytes,int flags,const struct sockaddr*to,socklen_t addrlen):往指定的地址發送數據;

3. close(sockfd);

⑵ c++編寫UDP客戶/伺服器程序,要求:使用udp服務實現客戶端與伺服器交互信息.

服務端與客戶端很大差異:
服務端接收多個客戶請示,客戶端只有一個客戶,
處理也不一樣。
你C++要選擇一個支持窗體的版本,如C++BUILDER,VC++等

⑶ 採用UDP協議進行通信的服務端和客戶端一個大致流程的偽代碼

起2個監聽線程分別綁2個埠
在來個線程池
ok
最好用MIna
nio之類的

⑷ 用java.net進行UDP編程伺服器端和客戶端的流程是怎樣的

伺服器端:
import java.io.*;
import java.net.*;
import java.applet.Applet;
public class TalkServer{
public static void main(String args[]) {
try{
ServerSocket server=null;
try{
server=new ServerSocket(4700);
}catch(Exception e) {
System.out.println("can not listen to:"+e);
}
Socket socket=null;
try{
socket=server.accept();
}catch(Exception e) {
System.out.println("Error."+e);
}
String line;
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter os=new PrintWriter(socket.getOutputStream());
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Client:"+is.readLine());
line=sin.readLine();
while(!line.equals("bye")){
os.println(line);
os.flush();
System.out.println("Server:"+line);
System.out.println("Client:"+is.readLine());
line=sin.readLine();
}
os.close();
is.close();
socket.close();
server.close();
}catch(Exception e){
System.out.println("Error:"+e);
}
}
}

客戶端:
import java.io.*;
import java.net.*;
public class TalkClient {
public static void main(String args[]) {
try{
Socket socket=new Socket("127.0.0.1",4700);
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
PrintWriter os=new PrintWriter(socket.getOutputStream());
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readline;
readline=sin.readLine(); //從系統標准輸入讀入一字元串
while(!readline.equals("bye")){
os.println(readline);
os.flush();
System.out.println("Client:"+readline);
System.out.println("Server:"+is.readLine());
readline=sin.readLine(); //從系統標准輸入讀入一字元串
}
os.close(); //關閉Socket輸出流
is.close(); //關閉Socket輸入流
socket.close(); //關閉Socket
}catch(Exception e) {
System.out.println("Error"+e); //出錯,則列印出錯信息
}
}
}

⑸ 用C#開發一個UDP伺服器

網上歷程有的是啊

無非就是
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 10002);
Socket command_sock_query =new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
command_sock_query.Bind(ipep);

然後是發送和接收
command_sock_query.SendTo(sendbuf, sendbuf.Length, SocketFlags.None, remoteIpEndPoint);
int recv = command_sock_query.ReceiveFrom(recv_data, ref Remote);

但是伺服器一般會寫多線程。這就是UDP的一個弊端了。只有阻塞在接收介面了,一旦接收到數據就要開啟新的線程,會導致一個客戶端創建很多線程

建議TCP寫伺服器吧,在連接那監聽,創建新線程。

⑹ udp伺服器怎麼創建多個socket描述符

DP Server程序 1、編寫UDP Server程序的步驟 (1)使用socket()來建立一個UDP socket,第二個參數為SOCK_DGRAM。 (2)初始化sockaddr_in結構的變數,並賦值。sockaddr_in結構定義: struct sockaddr_in { uint8_t sin_len; sa_family_t sin_family

⑺ 1簡述使用WINSOCK編寫基於UDP通信的基本步驟

伺服器設置本地埠 然後綁定(bind)
客戶端設置remote的ip和port為伺服器的ip和port 本地埠設置可以省略 然後直接send信息
如果沒有設置錯的話應該就通了 然後伺服器那邊也可以send到客戶端
注意如果有NAT設備路由器的話要設置埠轉發

⑻ 如何在windows系統伺服器添加UDP埠

第一步:首先遠程登錄到伺服器, 登錄以後在運行裡面輸入gpedit.msc回車,依次展開 計算機配置--windows設置--安全設置 打開IP安全策略,然後找到allow udp,

第二步:依次雙擊allow udp 選擇許可的allow udp再進行雙線,然後選擇默認第一描述為allow udp的進行雙線,然後點擊添加點擊添加以後會提示下一步,點擊下一步後,描述裡面填寫udp描述,示例以1111為例然後點擊下一步,源地址選擇我的IP地址,目標地址選擇任何IP地址協議類型選擇udp協議埠選擇從此埠到任意埠然後確認保存,最後在防火牆裡面添加放行udp埠即可

windows2008系統策略開啟和windows2003一樣,只是防火牆端有一點不一樣,開始--管理工具--高級安全window防火牆然後右鍵入站規則--新建規則,規則類型選擇埠,然後下一步,埠類型選擇udp,埠選擇本地然後全部默認下一步,名稱就填寫udp名有些用戶的伺服器埠是在TCP/IP埠篩選裡面,如果是啟用的篩選,請注意在篩選裡面去操作。

⑼ 如何實現一個tcp/udp客戶端和伺服器,以及它們之間是如何交互

你先要了解一下網路協議。你這說的是傳輸層的協議,TCP和UDP都是固定埠的。網路分成好多層的,每層的埠都不一樣,每一層將會把低一層的數據封裝打包,這個就是所謂的協議,不同功能的軟體和硬體處理自己這層的埠和數據,然後再傳遞給上層。每一層協議不相關,也不需要知道和理解傳來的是什麼,只負責自己的規則就好,傳過來的都當成數據處理打包。RTSP是應用層的協議,在TCP和UDP之上層,可以自定義埠,一般是554。系統自己會處理TCP和UDP數據,socket都已經實現好了,然後再將RTSP的協議數據通過埠554給你客戶端。所以你不用太關心TCP和UDP層的東西,如果你發燒無聊,也可以自己實現TCP和UDP協議,抓取數據,得到RTSP的數據包,就是RTSP協議層部分了。獲取到RTSP的協議部分,通過RTSP的協議,分析出命令和數據部分,這個就是基本解析過程。

熱點內容
圖片壓縮求 發布:2024-12-22 15:05:28 瀏覽:780
我的世界tis伺服器怎麼加 發布:2024-12-22 14:48:09 瀏覽:579
方舟伺服器虛擬內存是什麼意思 發布:2024-12-22 14:21:52 瀏覽:956
磁力片編程課 發布:2024-12-22 14:10:57 瀏覽:272
小米6實際存儲空間 發布:2024-12-22 13:41:25 瀏覽:595
sql注入補丁 發布:2024-12-22 13:32:58 瀏覽:120
小區高層消防逃生怎麼配置 發布:2024-12-22 13:29:20 瀏覽:717
伺服器配置光纖網卡ip 發布:2024-12-22 13:22:47 瀏覽:516
地圖下載源碼 發布:2024-12-22 13:18:40 瀏覽:394
navicat存儲過程導出 發布:2024-12-22 13:12:44 瀏覽:300