udp伺服器怎麼搭建
Ⅰ 用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寫伺服器吧,在連接那監聽,創建新線程。
Ⅱ VLC播放器搭建伺服器(TCP和UDP方式)
伺服器操作流程
客戶端操作:
伺服器操作:
客戶端操作:
既有基於TCP的RTP,也有基於UDP的RTP,但抓包發現,VLC的RTP是基於UDP的。
操作模式與UDP一致。
VLC的http方式搭建的流媒體伺服器是用TCP方式進行數據傳輸的,操作方式與RTSP一致。
Ⅲ LiteOS通信模組教程03-AT指令玩轉NB-IoT通信
BC35-G 是一款高性能、低功耗的多頻段 NB-IoT 無線通信模塊,支持 B1/B3/B8/B5/B20/B28 頻段,在設計和AT指令上與BC95兼容。
小熊派開發板右上角的開關撥到AT-PC一端,則模組直接與PC相連,方便調試。
指令:AT
功能:測試AT指令功能是否正常
示例:
指令:AT+CSQ
功能:返回從 UE 接收到的信號強度指示 <rssi> 和信道誤碼率 <ber> ,其中第一個值rssi應當在0-31之間,如果為99則表示信號無法檢測,第二個參數ber因為模組當前不支持,所以始終為99。
示例:
指令:AT+CEREG?
功能:查詢當前 EPS 網路注冊狀態,該指令返回的第一個參數為0則表示禁止網路注冊URC,第二個參數表示網路注冊狀態,1表示已注冊本地網,5表示已注冊漫遊網路,其餘值則表示注冊失敗。
示例:
指令:AT+CGATT?
功能:該命令用於查詢當前是否將 UE 附著於 PS 域,返回值為1則表示已附著,即網路激活成功。
示例:
指令:AT+CGPADDR
功能:該命令用於查詢模組當前的ip地址。
示例:
由於NB-IoT模組可以直接對接IoT平台,所以在單獨測試使用UDP連接時,需要 在激活網路成功之後,在獲取ip地址之前,關閉IoT平台注冊功能 。
使用如下命令禁止該功能:
首先我們需要搭建一個UDP伺服器,有兩種方式:
因為 NB-IoT 模組直接注冊的是公網ip地址,所以這里我們使用第一種方式,在Linux伺服器上運行一個Python編寫的UDP測試伺服器:
這里的Python程序如下:
運行:
效果如下:
使用AT命令連接UDP伺服器,首先需要創建一個 UDP 類型的 Socket,創建socket的指令如下:
其中第一個參數是socket類型,DGRAM表示UDP,STREAM表示UDP;第二個參數表示協議類型,UDP 為 17, UDP 為 6,最後一個參數指定socket使用的本地埠,如果為0則表示隨機分配。
所以創建UDP socket的示例如下:
指令:
其中第一個參數是由 AT+NSOCR 返回的 Socket 編號,第二個參數是UDP伺服器ip地址,也可以使用域名,第三個參數是UDP伺服器開啟監聽的埠,第四個是發送數據的長度,最後一個是要發送的十六進制數據。
示例:
發送之後,在伺服器端也可以看到:
模組發送數據到伺服器後,伺服器會自動發送消息,模組會列印出收到信息的提示:
該信息表示編號為1的socket收到了18位元組的數據。
可以使用如下命令查看收到的數據,第一個參數是socket編號,第二個參數是查詢的數據長度:
查看剛剛收到的數據:
其中收到的數據為倒數第二個參數,是十六進制格式:
使用 在線工具 將數據轉化為字元串即可:
通信完畢之後,可以使用下面的命令關閉最開始創建的socket:
示例:
Ⅳ 如何在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埠篩選裡面,如果是啟用的篩選,請注意在篩選裡面去操作。
Ⅳ 流媒體伺服器如何搭建七步就能解決問題
1、先去VLC軟體的官網下載軟體。
2、然後一路next,安裝完畢之後
3、打開「媒體->流」選項
4、添加上要播放的avi,再點擊串流,表示流媒體播放
5、再點擊下一步,這里我們以UDP形式播放,再點擊旁邊的添加,這里是重要的一步,IP地址填寫,你要推送到的客戶端的IP地址,所以這個伺服器,和這個IP最好處於同一網段。
6、選擇轉碼,格式h264和MP3(TS),下一步
7、點擊流,這里伺服器就配置完成了
8、客戶端,作如下配置就好
步驟:
1,和代理建立tcp聯接。
2,向代理發送版本的請求信息:
void CCommunicator::SendVer()
{
int datasize = 6;
char tempbuf[6];
tempbuf[0]=5;
tempbuf[1]=4;//標示後面所根的字接數
tempbuf[2]=0;
tempbuf[3]=1;
tempbuf[4]=2;
tempbuf[5]=3;
int senddatalen;
senddatalen=send(m_sock,(char*)tempbuf,6,0);
}
這一步如果失敗,斷開建立的tcp聯接,如果成功,如果需要用戶驗證則進行步驟3,否則進行4.
3,如果需要用戶驗證,則類似:
BOOL CCommunicator::SendUserTest()
{
int usernamelen=0;
int userpasslen=0;
usernamelen=m_strTestUserName.GetLength();
userpasslen=m_strTestUserPass.GetLength();
char tempbuf[100];
tempbuf[0]=5;
tempbuf[1]=usernamelen;//標示後面所根的字接數
strcpy(&tempbuf[2],m_strTestUserName);
tempbuf[2+usernamelen]=userpasslen;
strcpy((char*)&tempbuf [3+usernamelen],m_strTestUserPass);
int senddatalen;
int len;
len=usernamelen+userpasslen+3;
senddatalen=send(m_sock,(char*)tempbuf,len,0);
} 如果失敗,斷開建立的tcp聯接, 如果用戶返回成功,步驟4.
4,發送請求的協議類似:
void CCommunicator::SendRequestUDP()
{
int const datasize=10;
BYTE tempbuf[datasize]; tempbuf[0]=5;
tempbuf[1]=3;//標示UDP連接
tempbuf[2]=0;
tempbuf[3]=1;
tempbuf[4]=0;
tempbuf[5]=0;
tempbuf[6]=0;
tempbuf[7]=0;
*((SHORT*)(&(tempbuf[8])))=m_uBindUDPPort; //UDP在客戶端綁定的埠,就是你本地機器的做udp數據傳送的埠調用
//socket函數後,再調用bind()來邦定一個埠。
char temp;
temp=tempbuf[8];
tempbuf[8]=tempbuf[9];
tempbuf[9]=temp;
int senddatalen=send(m_sock,(char*)tempbuf,datasize,0);
}
如果失敗,斷開建立的tcp聯接,如果返回成功,驗證完畢!步驟5
5,真正的數據傳送,用代理傳送的時候,數據包的前面加上10個位元組類似:
void CCommunicator::CopyDataHead(BYTE * ptempbuf)
{
struct in_addr addr;
addr.s_addr=inet_addr(「202.220.33.333」);//這個ip是伺服器端的ip
ptempbuf[0]=0;
ptempbuf[1]=0;
ptempbuf[2]=0;
ptempbuf[3]=1;
ptempbuf[4]=(char)addr.S_un.S_un_b.s_b1;
ptempbuf[5]=(char)addr.S_un.S_un_b.s_b2;
ptempbuf[6]=(char)addr.S_un.S_un_b.s_b3;
ptempbuf[7]=(char)addr.S_un.S_un_b.s_b4;
*((SHORT*)(&(ptempbuf[8])))=m_uServerUDPPort;//伺服器的埠,就是你最終要發到那個伺服器的埠,也就是你的qq伺服器。
char temp;
temp=ptempbuf[8];
ptempbuf[8]=ptempbuf[9];
ptempbuf[9]=temp;
}
真正發送的時候類似:
int CCommunicator::SendBufferUDP(LPBYTE lpBuf,int nLen)
{
BYTE tempbuf[1000];
int iHeadData=0;
struct sockaddr_in her;
her.sin_family=AF_INET;
her.sin_addr.s_addr=inet_addr(m_szProxyAddr);//代理伺服器
her.sin_port=htons(m_uSocksPort);//發送請求的時候返回的代理伺服器端的埠,記住,這是最重要的。
CopyDataHead(tempbuf);
iHeadData=10;
nLen=nLen+10;
int addr_len;
addr_len=sizeof(struct sockaddr);
CopyMemory((char*)&tempbuf[iHeadData],lpBuf,nLen);
int returndatalen=sendto(m_socket,(char *)tempbuf,nLen,0,(struct sockaddr *)&her,addr_len);
Ⅶ udp組播伺服器地址填什麼
地址使用的是D類IP地址(224.0.0.0到239.255.255.255)。
UDP組播的基本步驟:創建udp socket、bind、加入組播組、發送/接收數據、close。
組播傳輸:數據發送者(源數據)將同一數據發送到多個接受者(組播組成員)。無論有多少個接受者,在整個網路鏈路上,只有一份該數據(在特殊場合,可以節省帶寬,減少主幹網路阻塞)。