❶ UDP通信求助各位大大: 要寫個UDP通信的程序作為伺服器,有單個網卡,多個IP地址(三個)
簡單的說是這樣一個過程:無獨立ip的客戶端一般是某個單位區域網內的某個主機,沒有固定的ip,其ip地址是通過dhcp協議動態分配得到的。但這個單位肯定會有一個獨立的B類或者C類地址,區域網內的主機向伺服器發出請求時通過這個ip,伺服器響應也會通過這個ip到達所在的區域網,然後到達所在主機;
❷ 如何使用集成了ESP8266晶元的NodeMCU以配置一個可交互的TCP伺服器
LinuxNodeMCU API
sudo apt-get install git screen
python2.7 python-serialmkdir -p ~/.opt && cd ~/.opt # just a
user-owned directory for software. Replace with what suits your needsgit
clone
File.format() remaining,
used, total = file.fsinfo()print("/nFile system info:/nTotal:
"..total.." Bytes/nUsed: "..used.." Bytes/nRemaining: "..remaining.."
Bytes/n")
4refr0nt
.) ,ip)
,gw,) =: Luatool
python luatool.py --port /dev/ttyUSB0 --src
init.lua --dest init.lua --verbosepython luatool.py --port /dev/ttyUSB0
--src main.lua --dest main.lua --verbose
-- init.lua ---- Network Variablesssid = tmr.alarm(0, 1000, 1, function() if wifi.sta.getip() == nil then
print("Connecting to AP.../n") else
ip, nm, gw=wifi.sta.getip()
print("IP Info: /nIP Address: ",ip)
print("Netmask: ",nm)
print("Gateway Addr: ",gw,'/n')
tmr.stop(0) led_pin = blink_open = print(print(srv:listen(gpio.site_image = blink_close
mcu_do == adc_value > adc_value = postparse={conn:send(python luatool.py
--port /dev/ttyUSB0 --src init.lua --dest init.lua
--verbosepython luatool.py --port /dev/ttyUSB0 --src main.lua --dest
main.lua --verbose
LEDLEDI/OLEDUDP
❸ 我家電腦udp伺服器不行了,誰能告訴我怎樣才能弄好
重買吧
❹ 如何搭建一個中轉伺服器
可以使用iptables或者nginx進行連接搭建。
Linux下埠轉發一般都使用iptables來實現,使用iptables可以很容易將TCP和UDP埠從防火牆轉發到內部主機上。但是如果需要將流量從專用地址轉發到不在您當前網路上的機器上,可嘗試另一個應用層埠轉發程序Rinetd。Rinetd短小、高效,配置起來比iptables也簡單很多。
如果你要配http、https轉發,要配ssl證書,那nginx大概是最合適的了。不過要注意nginx本身有一些限制,比方說一次上傳的數據大小。之前我沒注意這點,在主站配了又配,最後發現中轉的伺服器沒配置,秀逗了。另外新版的nginx不僅可以轉發http,也支持tcp流轉發了。
數據中轉站中安裝有數據中轉應用伺服器,由計劃任務或者其他喚醒程序啟動。
運行時注意的三步如下:
1、開啟源伺服器網路連接,連接源伺服器,約定下次通訊的方式(可選),獲取數據。
2、關閉與源伺服器網路的連接,開啟目標伺服器網路連接,向目標伺服器寫入數據。
3、關閉與目標伺服器網路的連接,進入緘默模式,等待下一次被喚醒。
❺ 怎麼搭建esp8266智能家居mqtt伺服器
存儲讀取到的ESP8266的信息,然後用print發送到串口上去。 如果你的串口監視器打開了,就可以看到信息了。
❻ Socket編程如何搭建一個外網可以訪問的伺服器
步驟:
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);
❼ 如何在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的協議,分析出命令和數據部分,這個就是基本解析過程。
❾ 如何搭建udp echo server
具體配置過程:
1、打開STM32CubeMX,並選擇好相應的晶元。文中的晶元為STM32F207VCT6,選擇後如下圖:
2、配置RCC時鍾、ETH、PA8以及使能LWIP;
由於此處我們的開發板硬體上為RMII方式,因此選擇ETH-RMII,若有同志的開發板為MII方式,請參考MII的配置方法,此處只針對RMII;
RCC選擇外部時鍾源,另外勾選MCO1,軟體會自動將PA8配置為MCO1模式,該引腳對於RMII方式很重要,用於為PHY晶元提供50MHz時鍾;
使能LWIP;
3、時鍾樹的相關配置,必須保證MCO1輸出為50Mhz,如果這個頻率不對會導致PHY晶元無法工作;
我這里因為晶元為207VCT6,為了使MCO1輸出為50Mhz,做了PLL倍頻參數的一些調整,總體如下:(同志們配置時可根據自己的晶元靈活配置,但需保證MCO1的輸出為50Mhz)
4、ETH、LWIP、RCC相關參數設置;
至此,比較重要的都在前面了,但是還有一點仍需要注意,即PA8引腳輸出速度,幾次不成功都是因為這個引腳沒注意。
後續的參數設置可以根據同志們自己的需求分別設置,這里給出我的設置供參考;
ETH參數保持默認,但中斷勾選一下;
LWIP參數設置如下:(因為我這里是配置UDP伺服器,IP選擇靜態分配)
5、生成工程,做最後的函數修改;
給生成的工程添加UDP伺服器的初始化以及埠綁定等相關函數;
我這里直接將之前的官方常式中的UDP伺服器文件加進來,如下:
之後將.c文件添加到用戶程序,主函數添加Udp的.h頭文件;如下:(udp文件的具體內容在後面給出)
6、主函數還需要添加一下幾個函數,在這里不對函數作用及實現原理講解,僅做添加說明。
附:udp_echoserver相關文件內容(該文件為官方的示常式序,版權歸官方,此處做轉載)
udp_echoserver.c的內容如下:
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "lwip/pbuf.h"
#include "lwip/udp.h"
#include "lwip/tcp.h"
#include
#include
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define UDP_SERVER_PORT 7 /* define the UDP local connection port */
#define UDP_CLIENT_PORT 7 /* define the UDP remote connection port */
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
void udp_echoserver_receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port);
/* Private functions ---------------------------------------------------------*/
/**
* @brief Initialize the server application.
* @param None
* @retval None
*/
void udp_echoserver_init(void)
{
struct udp_pcb *upcb;
err_t err;
/* Create a new UDP control block */
upcb = udp_new();
if (upcb)
{
/* Bind the upcb to the UDP_PORT port */
/* Using IP_ADDR_ANY allow the upcb to be used by any local interface */
err = udp_bind(upcb, IP_ADDR_ANY, UDP_SERVER_PORT);
if(err == ERR_OK)
{
/* Set a receive callback for the upcb */
udp_recv(upcb, udp_echoserver_receive_callback, NULL);
}
}
}
/**
* @brief This function is called when an UDP datagrm has been received on the port UDP_PORT.
* @param arg user supplied argument (udp_pcb.recv_arg)
* @param pcb the udp_pcb which received data
* @param p the packet buffer that was received
* @param addr the remote IP address from which the packet was received
* @param port the remote port from which the packet was received
* @retval None
*/
void udp_echoserver_receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port)
{
/* Connect to the remote client */
udp_connect(upcb, addr, UDP_CLIENT_PORT);
/* Tell the client that we have accepted it */
udp_send(upcb, p);
/* free the UDP connection, so we can accept new clients */
udp_disconnect(upcb);
/* Free the p buffer */
pbuf_free(p);
}
udp_echoserver.h的內容如下:
#ifndef __ECHO_H__
#define __ECHO_H__
void udp_echoserver_init(void);
#endif /* __MINIMAL_ECHO_H */
7、至此,所有的工作完成,編譯工程,下載至開發板。由於udp_echoserver中綁定的埠號為7,這里我們通過測試工具測試網路的功能,
❿ UDP伺服器是做什麼用的
UDP伺服器,就是首發數據,進行數據處理的。與TCP不同的是不用建立連接,直接調用recvfrom來收包。
開始就是基本的socket初始化地址什麼的。
要求多個線程處理客戶端命令,那recvfrom收包後,考慮把客戶端的地址信息保存,便於sendto,對接收的數據包,交給線程進行處理,每個線程可以向一塊共享內存、隊列里寫入收到的數據和對應的客戶端信息,每次寫的時候對這塊共享資源加鎖,多個線程對共享資源讀是加鎖,讀完解鎖,並開始處理數據。
處理完,用sendto發回去。
不是什麼大項目。小程序而已。