qt5 tcp服务器编程 多固定客户_如何编程实现电脑与智能小车通信?
51智能小車編程
最近在做智能小車,需要實現(xiàn)編寫上位機控制智能小車行駛方向與運行速度。因此首先需要解決的問題就是需要考慮如何實現(xiàn)計算機與智能小車進行通信。所使用硬件設(shè)備主要包括51單片機開發(fā)板、ESP8266 WIFI無線模塊。
ESP8266 WIFI模塊
本文主要介紹上位機端開發(fā),通過使用PC端開發(fā)軟件實現(xiàn)電腦端創(chuàng)建TCP連接服務器,為下一步ESP8266作為TCP客戶端實現(xiàn)客戶端與服務器端通信。為測試服務器端與客戶端通信,客戶端使用網(wǎng)絡調(diào)試助手模擬客戶端測試TCP連接與通信情況。其中網(wǎng)絡調(diào)試工具如下:
網(wǎng)絡調(diào)試工具
PC端軟件界面設(shè)計
本項目開發(fā)設(shè)計使用PC端實現(xiàn)對智能小車進行控制,主要設(shè)計實現(xiàn)功能包括小車實時信息顯示,視頻數(shù)據(jù)傳輸與小車行駛與方向控制,除此之外設(shè)置軟件TCP連接相關(guān)信息。PC端軟件界面設(shè)計如下所示:
智能小車PC端軟件設(shè)計
PC端軟件界面設(shè)計如上圖所示,通信狀態(tài)信息部分主要用于輸出顯示客戶端與服務器端通信情況,服務器設(shè)置主要實現(xiàn)TCP服務器端設(shè)計,指令操作區(qū)主要用于控制小車方向與速度,視頻顯示區(qū)主要接收小車攝像頭拍攝信息,小車信息主要用于顯示實時小車信息,信息收發(fā)區(qū)主要實現(xiàn)PC端與小車進行文字信息發(fā)送。這篇文章主要介紹服務器設(shè)置及TCP連接功能實現(xiàn)。
Socket連接創(chuàng)建與測試
本例使用C#程序設(shè)計語言開發(fā)服務器端,通過使用Socket類創(chuàng)建TCP連接服務器端,由網(wǎng)絡調(diào)試助手模擬客戶端測試服務器與客戶端連接及信息收發(fā)。
服務器設(shè)置及通信狀態(tài)顯示
信息收發(fā)功能區(qū)域
本文所介紹需要實現(xiàn)的兩個基本功能如上圖所示,部分核心代碼描述如下:
1、創(chuàng)建通信端口
try{ socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); ip = "127.0.0.1"; port = 8080; this.listBox1.Items.Insert(listBox1.Items.Count, "創(chuàng)建通信接口成功!!! "+DateTime.Now.ToString());}catch(Exception ex){ MessageBox.Show(ex.ToString()); }點擊啟動按鈕將執(zhí)行創(chuàng)建通信端口代碼,在服務器信息顯示端會顯示端口創(chuàng)建成功提示信息,如下圖所示:
創(chuàng)建通信端口
2、綁定端口并監(jiān)聽端口
private void button10_Click(object sender, EventArgs e) { socket.Bind(new IPEndPoint(IPAddress.Parse(ip), port)); this.listBox1.Items.Insert(listBox1.Items.Count, "綁定端口成功,正在監(jiān)聽!!! " + DateTime.Now.ToString()); socket.Listen(1); lThread = new Thread(listenClient); lThread.Start(); }private static void listenClient(){ while (true) { client = socket.Accept(); usocket = client; Thread recvThread = new Thread(recvData); recvThread.Start(client); Form1.MainForm.sendMsg(0,"客戶端連接成功"); } }以上代碼實現(xiàn)端口監(jiān)聽,客戶端通過使用TCP連接服務器端時會創(chuàng)建listenClient線程處理客戶端連接,在listenClient中創(chuàng)建recvData處理數(shù)據(jù)的發(fā)送與接收。
客戶端與服務器端連接成功
3、收發(fā)數(shù)據(jù)
private static void recvData(object client){ uclient = (Socket)client; while (true) { try { int recvCount = uclient.Receive(recv); if (recvCount == 0) { uclient.Shutdown(SocketShutdown.Both); uclient.Close(); return; } string recvData = Encoding.UTF8.GetString(recv, 0, recvCount); Form1.MainForm.sendMsg(1, recvData); } catch(Exception ex) { Form1.MainForm.sendMsg(0,ex.Message); } }}private void button2_Click(object sender, EventArgs e){ if(usocket!=null) { string str = this.sendBox.Text; string sendStr = str; byte[] bs = Encoding.UTF8.GetBytes(sendStr); try { usocket.Send(bs, bs.Length, 0); } catch (Exception ex) { Form1.MainForm.sendMsg(0, ex.Message); } } else { Form1.MainForm.sendMsg(0, "無法連接客戶端"); } }實現(xiàn)數(shù)據(jù)收發(fā)代碼描述如上所示,最終顯示效果如下圖:
服務器端與客戶端收發(fā)數(shù)據(jù)
以上給出使用C#編寫智能小車服務器端設(shè)計思路及TCP服務器端編程實現(xiàn),下一步就需要考慮ESP8266 WIFI模塊與PC端服務器建立TCP連接實現(xiàn)數(shù)據(jù)與操作指令的收發(fā),單片機獲取傳遞數(shù)據(jù)之后實現(xiàn)對小車方向及速度控制等。更多內(nèi)容后期文章將持續(xù)發(fā)布,歡迎大家關(guān)注、評論。
本頭條號長期關(guān)注編程資訊分享;編程課程、素材、代碼分享及編程培訓。如果您對以上方面有興趣或代碼錯誤、建議與意見,可在評論區(qū)回復。更多程序設(shè)計相關(guān)教程及實例分享,期待大家關(guān)注與閱讀!
總結(jié)
以上是生活随笔為你收集整理的qt5 tcp服务器编程 多固定客户_如何编程实现电脑与智能小车通信?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python gevent asynci
- 下一篇: resnet模型的图像分类结构图_Res