色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

Socket采用C/S模型進(jìn)行設(shè)計(jì)的服務(wù)器模型

Q4MP_gh_c472c21 ? 來(lái)源:未知 ? 作者:李倩 ? 2018-03-24 11:20 ? 次閱讀

Socket的中文翻譯為“插座”,在計(jì)算機(jī)世界里稱(chēng)為套接字。Socket最初是作為網(wǎng)絡(luò)上不同主機(jī)之間進(jìn)程的通信接口,后來(lái)應(yīng)用越來(lái)越廣,在同一主機(jī)上的不同進(jìn)程之間通信也可以用Socket。簡(jiǎn)單來(lái)說(shuō),當(dāng)網(wǎng)絡(luò)上不同主機(jī)之間的兩個(gè)進(jìn)程(A、B)采用Socket進(jìn)行通信時(shí),那么它們之間需要建立一個(gè)通信端點(diǎn),即創(chuàng)建Socket,創(chuàng)建Socket時(shí)就分配端口號(hào)和網(wǎng)絡(luò)地址。當(dāng)進(jìn)程A向進(jìn)程B發(fā)送數(shù)據(jù)時(shí),那么進(jìn)程A必須要知道進(jìn)程B的網(wǎng)絡(luò)地址及端口號(hào)。

Socket采用C/S模型進(jìn)行設(shè)計(jì)的,即Client/Server,面向客戶端—服務(wù)器模型。

每一個(gè)Socket都用一個(gè)半相關(guān)描述:

{協(xié)議,本地地址,本地端口}

一個(gè)完整的Socket則用一個(gè)相關(guān)描述:

{協(xié)議,本地地址,本地端口,遠(yuǎn)程地址,遠(yuǎn)程端口}

一、Socket的類(lèi)型

Socket有三種類(lèi)型:

1、字節(jié)流套接字(SOCK_STREAM)

字節(jié)流的套接字可以提供可靠的數(shù)據(jù)傳輸、面向連接的通訊流。數(shù)據(jù)按何種順序發(fā)送,就按何種順序接收。例如,當(dāng)我們按順序發(fā)送A-B-C,那么在數(shù)據(jù)到達(dá)接收端時(shí),它的順序也是A-B-C。字節(jié)流套接字采用的是TCP(Transmission Control Protocol)協(xié)議。保證了數(shù)據(jù)傳輸?shù)目煽啃浴?/p>

2、數(shù)據(jù)報(bào)套接字(SOCK_DGRAM

數(shù)據(jù)報(bào)套接字定義了一種無(wú)連接的服務(wù)。所謂無(wú)連接服務(wù),簡(jiǎn)單來(lái)說(shuō),即在發(fā)送數(shù)據(jù)時(shí),無(wú)需在收發(fā)兩端建立類(lèi)似TCP那樣的握手連接,在發(fā)送時(shí),將數(shù)據(jù)打包,然后加上遠(yuǎn)程IP地址,即可把該數(shù)據(jù)包發(fā)送出去。

數(shù)據(jù)通過(guò)相互獨(dú)立的報(bào)文進(jìn)行傳輸。并且是無(wú)序的、不可靠的傳輸。

3、原始套接字(SOCK_ROW)

原始套接字是我們需要關(guān)心的,因?yàn)槲覀兊腟ocket CAN采用的即是原始套接字。該接口允許對(duì)較底層協(xié)議進(jìn)行操作,如IP、ICMP等。原始套接字常用于檢驗(yàn)新的協(xié)議實(shí)現(xiàn)或訪問(wèn)現(xiàn)有服務(wù)中配置的新設(shè)備。

套接字的工作流程如下:

先啟動(dòng)服務(wù)器,通過(guò)調(diào)用socket()函數(shù)建立一個(gè)套接字,然后調(diào)用bind()函數(shù)將該套接字和本地網(wǎng)絡(luò)地址聯(lián)系在一起,再調(diào)用listen()函數(shù)使套接字做好偵聽(tīng)的準(zhǔn)備,并規(guī)定它的請(qǐng)求隊(duì)列的長(zhǎng)度,之后就調(diào)用accept()函數(shù)來(lái)接收連接??蛻舳嗽诮⑻捉幼种缶涂烧{(diào)用 connect()和服務(wù)器建立連接。連接一旦建立,客戶端和服務(wù)器之間就可以通過(guò)調(diào)用recv()/recvfrom()函數(shù)和send()/sendto函數(shù)來(lái)進(jìn)行發(fā)收數(shù)據(jù)。最后,待數(shù)據(jù)傳送結(jié)束后,雙方調(diào)用close()函數(shù)關(guān)閉套接字。

下面我們來(lái)寫(xiě)兩個(gè)簡(jiǎn)單的基于Socket的CAN應(yīng)用程序,但是我們采用的是SOCK_ROW,因此在套接字工作流程上有區(qū)別于SOCK_STREAM和SOCK_DGRAM。由于Socket采用C/S模型進(jìn)行設(shè)計(jì)的,所以我們的這兩個(gè)程序也分別為Server和Client。

首先是server端的程序,我們需要寫(xiě)一個(gè)服務(wù)器的程序,該程序接收來(lái)自客戶端發(fā)來(lái)的數(shù)據(jù),代碼如下:

int can_recv()

{

int sock_fd;

unsigned long nbytes, len;

struct sockaddr_can addr;

struct ifreq ifr;

/*為了能夠接收CAN報(bào)文,我們需要定義一個(gè)CAN數(shù)據(jù)格式的結(jié)構(gòu)體變量*/

struct can_frame frame;

struct can_frame *ptr_frame;

/*建立套接字,設(shè)置為原始套接字,原始CAN協(xié)議*/

sock_fd = socket(PF_CAN,SOCK_RAW,CAN_RAW);

/*以下是對(duì)CAN接口進(jìn)行初始化,如設(shè)置CAN接口名,即當(dāng)我們用ifconfig命令時(shí)顯示的名字*/

strcpy(ifr.ifr_name,"can0");

ioctl(sock_fd, SIOCGIFINDEX, &ifr);

printf("can0 can_ifindex = %x\n",ifr.ifr_ifindex);

/*設(shè)置CAN協(xié)議*/

addr.can_family = AF_CAN;

addr.can_ifindex = 0;

/*將剛生成的套接字與網(wǎng)絡(luò)地址進(jìn)行綁定*/

bind(sock_fd, (struct sockaddr*)&addr, sizeof(addr));

/*開(kāi)始接收數(shù)據(jù)*/

nbytes = recvfrom(sock_fd, &frame, sizeof(struct can_frame), 0, (struct sockaddr *)&addr, &len);

/*get interface name of the received CAN frame*/

ifr.ifr_ifindex = addr.can_ifindex;

ioctl(sock_fd, SIOCGIFNAME, &ifr);

printf("Received a CAN frame from interface %s\n",ifr.ifr_name);

/*將接收到的CAN數(shù)據(jù)打印出來(lái),其中ID為標(biāo)識(shí)符,DLC為CAN的字節(jié)數(shù),DATA為1幀報(bào)文的字節(jié)數(shù)*/

printf("CAN frame:\n ID = %x\n DLC = %x\n" \

"DATA = %s\n",frame.can_id,frame.can_dlc,frame.data);

ptr_frame = &frame;

return 0;

}

接下來(lái)是CAN的發(fā)送程序,即客戶端,代碼如下:

int can_send()

{

int sock_fd;

unsigned long nbytes;

struct sockaddr_can addr;

struct ifreq ifr;

struct can_frame frame;

/*建立套接字,設(shè)置為原始套接字,原始CAN協(xié)議*/

sock_fd = socket(PF_CAN,SOCK_RAW,CAN_RAW);

/*以下是對(duì)CAN接口進(jìn)行初始化,如設(shè)置CAN接口名,即當(dāng)我們用ifconfig命令時(shí)顯示的名字*/

strcpy((char *)(ifr.ifr_name), "can0");

ioctl(sock_fd, SIOCGIFINDEX, &ifr);

printf("can0 can_ifindex = %x\n", ifr.ifr_ifindex);

addr.can_family = AF_CAN;

addr.can_ifindex = ifr.ifr_ifindex;

/*將剛生成的套接字與CAN套接字地址進(jìn)行綁定*/

bind(sock_fd, (struct sockaddr*)&addr, sizeof(addr));

/*設(shè)置CAN幀的ID號(hào),可區(qū)分為標(biāo)準(zhǔn)幀和擴(kuò)展幀的ID號(hào)*/

frame.can_id = 0x1122;

strcpy((char *)frame.data,"hello");

frame.can_dlc = strlen(frame.data);

printf("Send a CAN frame from interface %s\n", ifr.ifr_name);

/*開(kāi)始發(fā)送數(shù)據(jù)*/

nbytes = sendto(sock_fd, &frame, sizeof(struct can_frame), 0, (struct sockaddr*)&addr, sizeof(addr));

return 0;

}

上面兩個(gè)程序看完后,大家可能會(huì)有疑問(wèn),為什么這兩個(gè)程序沒(méi)有l(wèi)isten()和accept()函數(shù)呢?其實(shí)這兩個(gè)程序是獨(dú)立的運(yùn)行的,并不像字節(jié)流套接字(SOCK_STREAM)和數(shù)據(jù)報(bào)套接字(SOCK_DGRAM),需要先運(yùn)行服務(wù)器進(jìn)行偵聽(tīng)。SOCK_STREAM和SOCK_DGRAM的兩個(gè)server和client程序是通過(guò)網(wǎng)絡(luò)相互收發(fā)數(shù)據(jù)。而CAN的socket的server和client程序收發(fā)數(shù)據(jù)的對(duì)象是CAN總線。server從CAN總線上接收數(shù)據(jù),client將數(shù)據(jù)發(fā)到CAN總線上,當(dāng)CAN總線上有數(shù)據(jù)時(shí),server才能接收數(shù)據(jù),當(dāng)CAN總線空閑時(shí),client才能將數(shù)據(jù)發(fā)送出去。

以上是對(duì)套接字的簡(jiǎn)單理解,并附上socket CAN的簡(jiǎn)單上層應(yī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)投訴
  • CAN
    CAN
    +關(guān)注

    關(guān)注

    57

    文章

    2756

    瀏覽量

    463818
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9199

    瀏覽量

    85524
  • Socket
    +關(guān)注

    關(guān)注

    0

    文章

    212

    瀏覽量

    34722

原文標(biāo)題:為了能夠?qū)ocket CAN的深入理解,我們需要了解Socket的機(jī)制

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    采用 Flexus 云服務(wù)器 X 實(shí)例搭建 RTSP 直播服務(wù)器

    一、前言 這篇文章講解:? 采用華為云最新推出的 Flexus 云服務(wù)器 X 實(shí)例搭建 RTSP 服務(wù)器,完成視頻直播需求。 隨著實(shí)時(shí)視頻流傳輸需求的增長(zhǎng),RTSP(實(shí)時(shí)流協(xié)議)服務(wù)器
    的頭像 發(fā)表于 12-24 17:36 ?164次閱讀
    <b class='flag-5'>采用</b> Flexus 云<b class='flag-5'>服務(wù)器</b> X 實(shí)例搭建 RTSP 直播<b class='flag-5'>服務(wù)器</b>

    基于 Flexus 云服務(wù)器 X 實(shí)例體驗(yàn)大模型部署體驗(yàn)測(cè)評(píng)

    也很快。但是大家目前都是在體驗(yàn),能不能部署一下試試呢? 今天,我們就以華為云 Flexus 云服務(wù)器 X 實(shí)例來(lái)部署一下,順便測(cè)測(cè)其性能看看。 在華為云 828 B2B 企業(yè)節(jié)狂潮中,F(xiàn)lexus X 實(shí)例的限時(shí)大促銷(xiāo)震撼來(lái)襲,絕對(duì)是你不容錯(cuò)過(guò)的超級(jí)福利!對(duì)于那些追求極致算力、對(duì)自
    的頭像 發(fā)表于 12-24 12:27 ?178次閱讀
    基于 Flexus 云<b class='flag-5'>服務(wù)器</b> X 實(shí)例體驗(yàn)大<b class='flag-5'>模型</b>部署體驗(yàn)測(cè)評(píng)

    【「大模型啟示錄」閱讀體驗(yàn)】如何在客服領(lǐng)域應(yīng)用大模型

    多個(gè)因素以確保所選模型能夠滿足企業(yè)的具體需求和目標(biāo)。首先,企業(yè)需要明確自己的客服需求和目標(biāo)。例如,是否需要24小時(shí)在線客服服務(wù)?是否需要處理復(fù)雜問(wèn)題的能力?是否需要個(gè)性化服務(wù)?明確這些需求有助于企業(yè)更好
    發(fā)表于 12-17 16:53

    socket 客戶端與服務(wù)器的實(shí)現(xiàn)

    1. 理解Socket 在計(jì)算機(jī)網(wǎng)絡(luò)中,socket是一種通信機(jī)制,允許兩個(gè)程序(一個(gè)客戶端和一個(gè)服務(wù)器)通過(guò)網(wǎng)絡(luò)進(jìn)行通信。在Python中,可以使用
    的頭像 發(fā)表于 11-12 14:30 ?327次閱讀

    socket 與 RESTful API 的使用

    Socket是一種網(wǎng)絡(luò)通信協(xié)議,它允許程序在網(wǎng)絡(luò)中進(jìn)行雙向通信。Socket分為客戶端Socket服務(wù)器
    的頭像 發(fā)表于 11-12 14:22 ?301次閱讀

    AI模型托管原理分析

    AI模型托管是指將訓(xùn)練好的AI模型部署在云端或邊緣服務(wù)器上,由第三方平臺(tái)提供模型運(yùn)行、管理和優(yōu)化等服務(wù)。以下,AI部落小編將對(duì)AI
    的頭像 發(fā)表于 11-07 09:33 ?175次閱讀

    GPU服務(wù)器AI網(wǎng)絡(luò)架構(gòu)設(shè)計(jì)

    眾所周知,在大型模型訓(xùn)練中,通常采用每臺(tái)服務(wù)器配備多個(gè)GPU的集群架構(gòu)。在上一篇文章《高性能GPU服務(wù)器AI網(wǎng)絡(luò)架構(gòu)(上篇)》中,我們對(duì)GPU網(wǎng)絡(luò)中的核心術(shù)語(yǔ)與概念
    的頭像 發(fā)表于 11-05 16:20 ?385次閱讀
    GPU<b class='flag-5'>服務(wù)器</b>AI網(wǎng)絡(luò)架構(gòu)設(shè)計(jì)

    AI服務(wù)器的特點(diǎn)和關(guān)鍵技術(shù)

    AI服務(wù)器,即人工智能服務(wù)器,是一種專(zhuān)門(mén)設(shè)計(jì)用于運(yùn)行和加速人工智能(AI)算法與模型的硬件設(shè)備。隨著人工智能技術(shù)的快速發(fā)展和普及,AI服務(wù)器在數(shù)據(jù)處理、
    的頭像 發(fā)表于 07-17 16:34 ?1700次閱讀

    Al大模型機(jī)器人

    )大模型AI機(jī)器人采用中英文雙語(yǔ)應(yīng)用,目前的知識(shí)圖譜包括了金航標(biāo)和薩科微所有的產(chǎn)品內(nèi)容、應(yīng)用場(chǎng)景、產(chǎn)品的家屬參數(shù)等,熱賣(mài)的型號(hào)S8050、TL431、SS8550、FR107、LM321、ZMM5V6
    發(fā)表于 07-05 08:52

    如何利用ESP32C3做UDP的服務(wù)器?

    請(qǐng)教一下,我利用了ESP32C3 建立了Soft AP ,我想利用ESP32C3做UDP的服務(wù)器。熱點(diǎn)的建立,參考例程都沒(méi)有問(wèn)題。關(guān)鍵是如何形成UDP的服務(wù)器。教程有教如何制作成TCP
    發(fā)表于 06-12 08:18

    為什么Cubeai導(dǎo)入模型的時(shí)候報(bào)錯(cuò)[AI:persondetection] ModuleNotFoundError: No module named \'_socket\'?

    在使用CubeIde導(dǎo)入ai模型進(jìn)行模型分析的時(shí)候報(bào)錯(cuò)[AI:persondetection] ModuleNotFoundError: No module named \'_socket
    發(fā)表于 05-21 06:44

    使用lwip socket udp功能,開(kāi)發(fā)板為客戶端時(shí)不能夠接收服務(wù)器端發(fā)送過(guò)來(lái)的數(shù)據(jù) ?

    請(qǐng)教下,使用 lwip socket udp 功能,開(kāi)發(fā)板為客戶端時(shí)不能夠接收服務(wù)器端發(fā)送過(guò)來(lái)的數(shù)據(jù) ? 1,如果開(kāi)發(fā)板為 服務(wù)器端,收發(fā)都可以 2,如果開(kāi)發(fā)板為 客戶端,不能夠接收服務(wù)器
    發(fā)表于 04-16 06:01

    商湯SenseChat大模型成功通過(guò)與華為Atlas服務(wù)器的相互兼容性測(cè)試

    近日,經(jīng)華為綜合評(píng)測(cè),SenseCore商湯大裝置AI云、商湯日日新·商量SenseChat大語(yǔ)言模型成功通過(guò)與華為Atlas系列服務(wù)器的相互兼容性測(cè)試,獲得HUAWEI COMPATIBLE證書(shū)及認(rèn)證徽標(biāo)的使用權(quán)。
    的頭像 發(fā)表于 03-22 13:38 ?682次閱讀
    商湯SenseChat大<b class='flag-5'>模型</b>成功通過(guò)與華為Atlas<b class='flag-5'>服務(wù)器</b>的相互兼容性測(cè)試

    在MPU上實(shí)現(xiàn)AI模型的遷移與應(yīng)用流程

    模型訓(xùn)練的程序和模型轉(zhuǎn)換腳本程序,可根據(jù)自己的需要在個(gè)人電腦或服務(wù)器進(jìn)行環(huán)境搭建和應(yīng)用。
    發(fā)表于 03-04 14:14 ?990次閱讀
    在MPU上實(shí)現(xiàn)AI<b class='flag-5'>模型</b>的遷移與應(yīng)用流程

    求助,請(qǐng)問(wèn)使用AT_SOCKET是否可以使用WEBNET組件實(shí)現(xiàn)網(wǎng)頁(yè)服務(wù)器

    server功能的,進(jìn)而意味著無(wú)法實(shí)現(xiàn)網(wǎng)頁(yè)服務(wù)器功能。 不知道我這樣理解是否正確? 如果是這樣的話,那么能否有其他手段實(shí)現(xiàn)呢?或者RTT是否有機(jī)會(huì)改進(jìn)at_socket的功能?
    發(fā)表于 02-19 06:36
    主站蜘蛛池模板: 午夜久久影院| 国产69精品久久久久乱码韩国| 一本到道免费线观看| 国产亚洲精品久久久999无毒| 精品亚洲一区二区三区在线播放| 浪潮AV色综合久久天堂| 日本十八禁无遮无挡漫画| 亚洲黄色三级视频| ASIAN大陆明星裸休合成PICS| 国产精品人妻系列21P| 久久在精品线影院精品国产| 日本久久高清视频| 亚洲久久少妇中文字幕| www免费看.男人的天堂| 极品少妇高潮啪啪AV无码吴梦梦 | 高清mv视频免费观看| 久久精品国产只有精品| 三级网站视频| 20岁中国男同志china1069| 国产免费阿v精品视频网址| 蜜桃无码AV视频在线观看| 小SB几天没做SAO死了H| 9位美女厕所撒尿11分| 户外插BBBBB| 色cccwww| 99久久免费精品国产免费| 黑人巨大交牲老太| 色橹橹欧美在线观看视频高清| 夜色88V精品国产亚洲AV| 第一福利视频网站在线| 久久无码人妻AV精品一区| 无人影院在线播放视频| 99久热精品免费观看| 精品国产国产精2020久久日| 日日噜噜大屁股熟妇| 18videosex性欧美黑色| 99在线观看视频免费| 激情综合色| 天天操天天干天天爽| caoporm国产精品视频免费| 久久99国产精品无码AV|