在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

服務(wù)器端模式下的TCP通信

單片機(jī)愛(ài)好者 ? 2019-12-30 09:15 ? 次閱讀

上一節(jié)說(shuō)的是TCP客戶(hù)端模式下的通信,這一節(jié)說(shuō)一下服務(wù)器端模式下的通信,總體來(lái)說(shuō),代碼是差不多的,只是關(guān)鍵地方有些調(diào)整。

另外,包括上一節(jié)在內(nèi),這兩節(jié)的代碼里,ESP8266的工作模式設(shè)置為了station+softap模式。但在進(jìn)行TCP通信時(shí),都是以station的身份通信。后面會(huì)說(shuō)一下,如果以softap身份通信有什么注意事項(xiàng)。

還有就是,有的朋友留言問(wèn),如果想快速開(kāi)發(fā)APP,實(shí)現(xiàn)手機(jī)和ESP8266的通信調(diào)試,一般怎么實(shí)現(xiàn)。就我個(gè)人,一般是在物聯(lián)網(wǎng)后臺(tái)上直接看數(shù)據(jù),很少在手機(jī)上操作。有沒(méi)有想過(guò)自己寫(xiě)APP?

有,確實(shí)想過(guò),但還是之前提過(guò)的,我是個(gè)硬件工程師~自己寫(xiě)APP?跨度有點(diǎn)大,我倒是做過(guò)一些工作,研究過(guò)易安卓和安卓studio,感興趣的可以試著從這兩方便入手試試,或者有其它的,大家也可以留言。

好,繼續(xù)。這里保留上一節(jié)引用的“TCP編程的服務(wù)器端一般步驟”,作為參考:

TCP編程的服務(wù)器端一般步驟是:

1、創(chuàng)建一個(gè)socket,用函數(shù)socket();

2、設(shè)置socket屬性,用函數(shù)setsockopt(); * 可選

3、綁定IP地址、端口信息到socket上,用函數(shù)bind();

4、開(kāi)啟監(jiān)聽(tīng),用函數(shù)listen();

5、接收客戶(hù)端上來(lái)的連接,用函數(shù)accept();

6、收發(fā)數(shù)據(jù),用函數(shù)send()和recv(),或者read()和write();

7、關(guān)閉網(wǎng)絡(luò)連接;

8、關(guān)閉監(jiān)聽(tīng);

因?yàn)椴襟E和上一節(jié)相似程度很高,所以我會(huì)做一些簡(jiǎn)化,如果有看不懂的地方,建議對(duì)比上一節(jié)內(nèi)容。另外,學(xué)習(xí)類(lèi)的東西,建議在電腦端打開(kāi),個(gè)人感覺(jué)手機(jī)上看的效果一般,只能看個(gè)大概。深度學(xué)習(xí),個(gè)人還是習(xí)慣在電腦上進(jìn)行。好,演示開(kāi)始。

因?yàn)樽隽撕?jiǎn)化,步驟分為4步。

1 包含頭文件

跟上一節(jié)一樣,所以略過(guò)。

2 設(shè)置工作模式為station+ soft-ap模式,并連接到當(dāng)前環(huán)境下的wifi

跟上一節(jié)一樣,但是這次的代碼加了一句。雖然設(shè)置為了station+ soft-ap模式,設(shè)置了AP名字和密碼,但好像不用輸入密碼就能連接,這是因?yàn)闆](méi)有設(shè)置加密模式:

config.authmode = AUTH_WPA_PSK; //加密模式

增加這一行之后,就可以了。更多信息建議看一下“softap_config”這個(gè)結(jié)構(gòu)體的定義,里面比較詳細(xì)。

3 確定TCP服務(wù)器端的參數(shù),并初始化

我是誰(shuí)——ESP8266,連接家里路由成功之后,會(huì)自動(dòng)獲得一個(gè)IP,這是服務(wù)器端IP

誰(shuí)要和我連接——因?yàn)槭窃谖译娔X上使用網(wǎng)絡(luò)調(diào)試助手模擬TCP客戶(hù)端端,所以客戶(hù)端端的IP是我電腦的IP:192.168.1.103

連接的端口——這里選1025.

struct ip_info info;

const char remote_ip[4]={192,168,1,103}; //TCP客戶(hù)端IP

wifi_get_ip_info(STATION_IF,&info); //獲取8266的WIFI信息

server_init((struct ip_addr *)remote_ip,&info.ip,1025);

可以看到,和上一節(jié)相比,函數(shù)名字變了,但其實(shí)內(nèi)容大部分都一樣:

{

LOCAL struct espconn esp_conn;

//初始化espconn參數(shù)

esp_conn.type=ESPCONN_TCP;

esp_conn.state=ESPCONN_NONE;

esp_conn.proto.tcp=(esp_tcp *)os_malloc(sizeof(esp_tcp));

os_memcpy(esp_conn.proto.tcp->local_ip,local_ip,4);

os_memcpy(esp_conn.proto.tcp->remote_ip,remote_ip,4);

esp_conn.proto.tcp->local_port=port;

//注冊(cè)連接成功回調(diào)函數(shù)和重新連接回調(diào)函數(shù)

espconn_regist_connectcb(&esp_conn,server_listen);

espconn_regist_reconcb(&esp_conn,server_recon);

//創(chuàng)建TCP server,建立監(jiān)聽(tīng)

espconn_accept(&esp_conn);

}

不一樣的地方,我用加粗和斜線的方式標(biāo)了出來(lái)。先說(shuō):

espconn_accept(&esp_conn);

因?yàn)檫@個(gè)簡(jiǎn)單,上一節(jié)是TCP客戶(hù)端,創(chuàng)建連接,所以用:

espconn_connect(&user_tcp_conn);

而這一節(jié)是服務(wù)器端,是一個(gè)等待別人來(lái)連接我的角色,所以要監(jiān)聽(tīng)別人。

然后是回調(diào)函數(shù)server_listen,它的內(nèi)容也和客戶(hù)端不一樣。具體區(qū)別看第4步。

4 定義連接成功的回調(diào)函數(shù)

函數(shù)內(nèi)容如下:

struct espconn *pespconn=arg;

os_printf(" nconnect success! ");

espconn_regist_recvcb(pespconn,server_recv);

espconn_regist_sentcb(pespconn,server_sent);

espconn_regist_disconcb(pespconn,server_discon);

客戶(hù)端的函數(shù)代碼如下:

struct espconn *pespconn=arg;

espconn_regist_recvcb(pespconn,user_tcp_recv_cb);

espconn_regist_sentcb(pespconn,user_tcp_sent_cb);

espconn_regist_disconcb(pespconn,user_tcp_discon_cb);

espconn_sent(pespconn,"hello,this is esp8266!",strlen("hello,this is esp8266!"));

不考慮printf的打印信息,創(chuàng)建的這三個(gè)回調(diào)函數(shù),功能大部分基本是一樣的。都是接收完成回調(diào)函數(shù)、發(fā)送完成回調(diào)函數(shù)和斷開(kāi)連接回調(diào)函數(shù)。區(qū)別在于客戶(hù)端連接成功后會(huì)主動(dòng)發(fā)送信息,而服務(wù)器端被動(dòng)一些,收到信息后,才會(huì)根據(jù)需要有所返回。

那幾個(gè)回調(diào)函數(shù),功能大同小異,就不說(shuō)了。所以除了這些,基本上就沒(méi)什么區(qū)別了。感興趣的童鞋,建議把代碼下載下來(lái),依次對(duì)比一下,這樣可以有一個(gè)比較深的理解。

好,到此為止,程序修改完畢。

注:本例程里提到的大部分函數(shù),都參照手冊(cè)2c-esp8266_sdk_api_guide_cn_v1.5.4。

程序修改完成,保存、清理、編譯、下載一條龍,然后重新上電。這里,需要借助串口助手和網(wǎng)絡(luò)調(diào)試助手兩個(gè)工具來(lái)查看效果。效果如下所示:

設(shè)置網(wǎng)絡(luò)調(diào)試助手:

注意事項(xiàng):需要等到ESP8266連接家里wifi成功以后,也就是串口助手打印出:Wifi connect success!之后,網(wǎng)絡(luò)調(diào)試助手才能進(jìn)行連接。

因?yàn)樵诖酥埃琓CP server端還沒(méi)有初始化完成,這時(shí)候TCP客戶(hù)端即便想連接,也找不到對(duì)象。

TCP連接成功之后,串口助手輸出信息:connect success!

這時(shí),手動(dòng)從網(wǎng)絡(luò)調(diào)試助手那里發(fā)送信息:MCU LOVER

可以看到串口助手打印出來(lái),這說(shuō)明ESP8266已經(jīng)收到了。

這時(shí),在網(wǎng)絡(luò)調(diào)試助手這里點(diǎn)擊“斷開(kāi)”,可以看到串口助手打印:TCP cliend disconnected!

說(shuō)明連接斷開(kāi)成功(client 寫(xiě)成了 cliend,不要在意這些細(xì)節(jié))。

最后,有的人可能會(huì)問(wèn),你說(shuō)的這些步驟、工作流程都是怎么來(lái)的?不可能是瞎猜的吧?

確實(shí),這個(gè)問(wèn)題很關(guān)鍵,所有工作都要有一個(gè)明確的工作流程。其實(shí)答案還是在手冊(cè)里:2c-esp8266_sdk_api_guide_cn_v1.5.4,第216頁(yè):

有了手冊(cè),再參考SDK里面的例程,基本就差不多了。還是那句話,多看手冊(cè)。好,這一節(jié)說(shuō)完了,歡迎大家動(dòng)手嘗試!

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9331

    瀏覽量

    86131
  • TCP通信
    +關(guān)注

    關(guān)注

    0

    文章

    146

    瀏覽量

    4295

原文標(biāo)題:ESP8266_13服務(wù)器端模式下的TCP通信

文章出處:【微信號(hào):gh_dae0718828df,微信公眾號(hào):gh_dae0718828df】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    qt tcp程序在服務(wù)器端發(fā)送數(shù)據(jù)之前能接收客戶(hù)發(fā)送的數(shù)據(jù)嗎?

    寫(xiě)了一個(gè)tcp的客戶(hù)服務(wù)器端,是服務(wù)器端給客戶(hù)發(fā)送文件,但是我想在服務(wù)器端發(fā)送之前先讓客戶(hù)
    發(fā)表于 04-22 20:06

    PC訪問(wèn)服務(wù)器 并讀取服務(wù)器端的數(shù)據(jù) 怎么寫(xiě)啊?

    PC訪問(wèn)服務(wù)器并讀取服務(wù)器端的數(shù)據(jù) 怎么寫(xiě)啊? 需要訪問(wèn)數(shù)據(jù)庫(kù)嗎?聽(tīng)說(shuō)還要服務(wù)器那邊的用戶(hù)名和密碼才能訪問(wèn)數(shù)據(jù)庫(kù)不需要兩臺(tái)pc機(jī)的通信的程
    發(fā)表于 07-27 09:00

    labview和 讀碼的以太網(wǎng)通信 (沒(méi)有服務(wù)器端的程序)

    :192.168.100.10)用讀碼自帶的設(shè)置軟件在電腦上可以發(fā)現(xiàn)并設(shè)置兩臺(tái)讀碼, 問(wèn)題來(lái)了:說(shuō)明書(shū)上寫(xiě)可以用TCP,SOCKET通信,但是只有電腦上有客戶(hù)端接收數(shù)據(jù)的程序,而讀
    發(fā)表于 08-14 17:31

    請(qǐng)問(wèn)gprs與服務(wù)器通信服務(wù)器端的程序怎么寫(xiě)?

    大家好,最近在做sim808芯片的gprs與服務(wù)器通信,用的是阿里云的服務(wù)器,請(qǐng)問(wèn)一服務(wù)器端的程序改怎么寫(xiě)?用VB嗎?有沒(méi)有相關(guān)的教程可以
    發(fā)表于 04-17 23:22

    請(qǐng)問(wèn)ESP8266設(shè)為AP的tcp服務(wù)器端如何一對(duì)多通信

    我用WiFi模塊的AP模式當(dāng)做TCP服務(wù)器來(lái)使用,然后用手機(jī)的網(wǎng)絡(luò)助手創(chuàng)建了兩個(gè)連接。然后在單片機(jī)上查詢(xún)到的IP結(jié)果是一個(gè)為IPD0,一個(gè)為IPD1,對(duì)他們進(jìn)行
    發(fā)表于 04-23 01:53

    為什么LWIP的TCP客戶(hù)服務(wù)器端斷開(kāi)后繼續(xù)發(fā)送數(shù)據(jù)就無(wú)法檢測(cè)到連接狀態(tài)?

    發(fā)現(xiàn)LWIP的TCP客戶(hù)有個(gè)BUG,當(dāng)服務(wù)器端開(kāi)之后,如果還繼續(xù)發(fā)送數(shù)據(jù),那就不能檢測(cè)到連接狀態(tài)。求助求助
    發(fā)表于 10-29 20:26

    LabVIEW編寫(xiě)作為服務(wù)器端TCP工具

    ` 本帖最后由 yk74110 于 2021-1-18 16:47 編輯 LabVIEW編寫(xiě)作為服務(wù)器端TCP工具;可以實(shí)現(xiàn)在同一臺(tái)電腦或者同在一個(gè)局域網(wǎng)的不同2臺(tái)電腦之間點(diǎn)對(duì)點(diǎn)雙向即時(shí)通信
    發(fā)表于 01-18 16:44

    用freertos和LWIP開(kāi)發(fā)一個(gè)服務(wù)器端TCP/IP服務(wù)

    我在工作中需要在STM32F2系列,用freertos和LWIP開(kāi)發(fā)一個(gè)服務(wù)器端TCP/IP服務(wù)。由于內(nèi)存有限并且freertos不便于利用fork函數(shù)新建線程,因此采用了sele
    發(fā)表于 08-24 07:30

    TCP服務(wù)器模式配置流程是什么

    TCP服務(wù)器模式配置流程是什么?如何去實(shí)現(xiàn)TCP服務(wù)器通信呢?
    發(fā)表于 01-14 06:02

    esp32C3用TCP連接問(wèn)題,無(wú)法識(shí)別服務(wù)器端主動(dòng)斷開(kāi)怎么解決?

    服務(wù)器端主動(dòng)斷開(kāi)連接esp32C3用TCP的send函數(shù)仍能發(fā)送成功返回字節(jié)數(shù),但服務(wù)器端已經(jīng)無(wú)法收到數(shù)據(jù)。為何還能發(fā)送成功?這里如何判斷服務(wù)器已斷開(kāi)從而進(jìn)行斷線重連?
    發(fā)表于 03-14 06:06

    服務(wù)器端腳本與動(dòng)態(tài)網(wǎng)頁(yè)設(shè)計(jì),下載

    服務(wù)器端腳本與動(dòng)態(tài)網(wǎng)頁(yè)設(shè)計(jì) 1. 了解服務(wù)器端腳本和動(dòng)態(tài)網(wǎng)頁(yè)的有關(guān)概念 ; 2. 了解ASP、PHP的基本語(yǔ)法和基本功能 ; 3. 熟練掌握J(rèn)SP的基本語(yǔ)法和基本
    發(fā)表于 04-28 16:44 ?0次下載

    JAVA教程之TCP服務(wù)器端

    JAVA教程之TCP服務(wù)器端,很好的JAVA的資料,快來(lái)學(xué)習(xí)吧
    發(fā)表于 04-11 17:28 ?10次下載

    網(wǎng)絡(luò)調(diào)試和串口調(diào)試集合UDP TCP客戶(hù)TCP服務(wù)器端應(yīng)用程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是網(wǎng)絡(luò)調(diào)試和串口調(diào)試集合UDP TCP客戶(hù)TCP服務(wù)器端應(yīng)用程序免費(fèi)下載。
    發(fā)表于 08-30 08:00 ?16次下載
    網(wǎng)絡(luò)調(diào)試和串口調(diào)試集合UDP <b class='flag-5'>TCP</b>客戶(hù)<b class='flag-5'>端</b>和<b class='flag-5'>TCP</b><b class='flag-5'>服務(wù)器端</b>應(yīng)用程序免費(fèi)下載

    TCP通信服務(wù)器端和客戶(hù)同機(jī)互傳的簡(jiǎn)單示例程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是TCP通信服務(wù)器端和客戶(hù)同機(jī)互傳的簡(jiǎn)單示例程序免費(fèi)下載初學(xué)者學(xué)習(xí)。本例子是本計(jì)算機(jī)labview程序之間的通信,如果要想實(shí)現(xiàn)計(jì)算機(jī)與計(jì)算機(jī)之間的
    發(fā)表于 10-25 08:00 ?9次下載
    <b class='flag-5'>TCP</b><b class='flag-5'>通信服務(wù)器端</b>和客戶(hù)<b class='flag-5'>端</b>同機(jī)互傳的簡(jiǎn)單示例程序免費(fèi)下載

    LinuxTCP網(wǎng)絡(luò)編程-創(chuàng)建服務(wù)器與客戶(hù)

    這篇文章介紹在Linux的socket編程,完成TCP服務(wù)器、客戶(hù)的創(chuàng)建,實(shí)現(xiàn)數(shù)據(jù)通信
    的頭像 發(fā)表于 08-14 09:26 ?2556次閱讀
    Linux<b class='flag-5'>下</b><b class='flag-5'>TCP</b>網(wǎng)絡(luò)編程-創(chuàng)建<b class='flag-5'>服務(wù)器</b>與客戶(hù)<b class='flag-5'>端</b>
    主站蜘蛛池模板: 免费在线观看你懂的 | 操天天操| 五月天婷婷一区二区三区久久 | 狠狠色婷婷丁香六月 | 一区二区高清在线观看 | 亚洲婷婷综合中文字幕第一页 | 2021精品国产综合久久 | 亚洲三区视频 | 国产免费黄视频 | 午夜在线播放视频在线观看视频 | 久久久久久久国产精品影院 | 色视频色露露永久免费观看 | 三级欧美视频 | 久久久久久久国产精品电影 | 四虎国产精品免费久久影院 | 国产中文99视频在线观看 | 在线色站| 国产精品三区四区 | 亚欧免费视频一区二区三区 | 一区| 美女拍拍拍免费视频观看 | 国产精品美女自在线观看免费 | 1024你懂的国产精品 | 男人的午夜天堂 | 97视频碰碰车 | 免费的毛片网站 | 精品一区二区三区自拍图片区 | 午夜影视在线免费观看 | 最好看的最新中文字幕2018免费视频 | 69日本人xxxx16-18 | 免费啪啪网 | 免费色视频在线观看 | 欧美黄色片 一级片 | 高h细节肉爽文男男 | 六月婷婷视频 | 亚洲精品一卡2卡3卡三卡四卡 | 人人艹人人草 | 不卡一区二区在线观看 | 一区二区三区高清在线观看 | 98pao强力打造高清免费 | 奇米四色7777|