哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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ī)世界里稱為套接字。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的類型

Socket有三種類型:

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ā)兩端建立類似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)注

    59

    文章

    3095

    瀏覽量

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

    關(guān)注

    14

    文章

    10345

    瀏覽量

    91740
  • Socket
    +關(guān)注

    關(guān)注

    1

    文章

    214

    瀏覽量

    37021

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    RENESAS 932S890C:AMD 服務(wù)器系統(tǒng)時(shí)鐘解決方案

    RENESAS 932S890C:AMD 服務(wù)器系統(tǒng)時(shí)鐘解決方案 引言 在服務(wù)器的設(shè)計(jì)領(lǐng)域中,系統(tǒng)時(shí)鐘的穩(wěn)定性和性能起著決定性作用。今天,我們將深入探討 RENESAS 的 932S890C
    的頭像 發(fā)表于 03-26 12:00 ?285次閱讀

    EtherCAT FOE工作原理揭秘:客戶端-服務(wù)器模型如何運(yùn)轉(zhuǎn)?

    上期我們聊了EtherCATFOE的五大應(yīng)用場(chǎng)景,本期深入解析其底層工作機(jī)制。FOE究竟是如何實(shí)現(xiàn)文件傳輸?shù)??答案藏在客戶?服務(wù)器模型中。核心架構(gòu):一客戶端多服務(wù)器在EtherCAT網(wǎng)絡(luò)中,F(xiàn)OE
    的頭像 發(fā)表于 03-02 11:50 ?207次閱讀
    EtherCAT FOE工作原理揭秘:客戶端-<b class='flag-5'>服務(wù)器</b><b class='flag-5'>模型</b>如何運(yùn)轉(zhuǎn)?

    Microchip推出模型語(yǔ)境協(xié)議(MCP)服務(wù)器,助力AI驅(qū)動(dòng)的產(chǎn)品數(shù)據(jù)訪問(wèn)

    )今日推出模型語(yǔ)境協(xié)議(MCP)服務(wù)器。作為AI接口,MCP服務(wù)器可直接連接兼容的AI工具和大型語(yǔ)言模型,為其提供解答問(wèn)題所需的上下文信息。通過(guò)簡(jiǎn)單的對(duì)話式查詢,MCP
    的頭像 發(fā)表于 12-04 16:45 ?1163次閱讀

    socket是什么

    于在不同計(jì)算機(jī)之間傳輸數(shù)據(jù)。Socket技術(shù)可以用于實(shí)現(xiàn)各種網(wǎng)絡(luò)應(yīng)用,例如客戶端-服務(wù)器應(yīng)用,點(diǎn)對(duì)點(diǎn)應(yīng)用等。 在計(jì)算機(jī)網(wǎng)絡(luò)中,Socket技術(shù)通常用于創(chuàng)建客戶端-服務(wù)器
    發(fā)表于 12-03 08:27

    Microchip推出模型語(yǔ)境協(xié)議服務(wù)器

    為進(jìn)一步兌現(xiàn)公司為嵌入式工程師開(kāi)發(fā)AI解決方案的承諾,Microchip Technology Inc.(微芯科技公司)今日推出模型語(yǔ)境協(xié)議(MCP)服務(wù)器。作為AI接口,MCP服務(wù)器可直接連接兼容
    的頭像 發(fā)表于 11-24 15:43 ?744次閱讀

    DeepSeek模型如何在云服務(wù)器上部署?

    隨著大型語(yǔ)言模型(LLM)的應(yīng)用日益普及,許多開(kāi)發(fā)者和企業(yè)希望將像DeepSeek這樣的優(yōu)秀模型部署到自己的云服務(wù)器上,以實(shí)現(xiàn)私有化、定制化服務(wù)并保障數(shù)據(jù)安全。本文將詳細(xì)闡述部署Dee
    的頭像 發(fā)表于 10-13 16:52 ?1128次閱讀

    【HZ-RK3568開(kāi)發(fā)板免費(fèi)體驗(yàn)】基于 Select Poll的TCP發(fā)服務(wù)器

    開(kāi)發(fā)環(huán)境: 主機(jī):Ubuntu 20.04 開(kāi)發(fā)板:合眾HZ-RK3568開(kāi)發(fā)板 并發(fā)服務(wù)器支持多個(gè)客戶端的同時(shí)連接,最大可接入的客戶端數(shù)取決于內(nèi)核控制塊的個(gè)數(shù)。當(dāng)使用Socket API時(shí),要使
    發(fā)表于 08-19 22:01

    如何進(jìn)行YOLO模型轉(zhuǎn)換?

    我目前使用的轉(zhuǎn)模型代碼如下 from ultralytics import YOLOimport cv2import timeimport nncaseimport# 加載預(yù)訓(xùn)練的YOLO模型
    發(fā)表于 08-14 06:03

    鴻蒙中Stage模型與FA模型詳解

    【HarmonyOS 5】鴻蒙中Stage模型與FA模型詳解 ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、前言 在HarmonyOS 5的應(yīng)用開(kāi)發(fā)
    的頭像 發(fā)表于 07-07 11:50 ?1068次閱讀

    ai服務(wù)器是什么?與普通服務(wù)器有什么區(qū)別

    AI服務(wù)器并非簡(jiǎn)單的硬件堆砌,而是專門(mén)為人工智能任務(wù)設(shè)計(jì)的高性能計(jì)算系統(tǒng)。其核心目標(biāo)是高效處理海量數(shù)據(jù)并行計(jì)算(如矩陣乘法、模型推理),并針對(duì)AI工作負(fù)載(如深度學(xué)習(xí)訓(xùn)練、大模型推理)進(jìn)行
    的頭像 發(fā)表于 06-24 16:39 ?4912次閱讀

    【教程】使用NS1串口服務(wù)器對(duì)接智普清言免費(fèi)AI大語(yǔ)言模型

    AI大語(yǔ)言模型可以幫助我們解決各種問(wèn)題,如翻譯、寫(xiě)文案、創(chuàng)作詩(shī)歌、解決數(shù)學(xué)問(wèn)題、情感陪伴等等。今天教大家如何使用NS1串口服務(wù)器模塊實(shí)現(xiàn)對(duì)接智普清言AI大語(yǔ)言模型,實(shí)現(xiàn)與大語(yǔ)言模型的對(duì)
    的頭像 發(fā)表于 06-12 19:33 ?918次閱讀
    【教程】使用NS1串口<b class='flag-5'>服務(wù)器</b>對(duì)接智普清言免費(fèi)AI大語(yǔ)言<b class='flag-5'>模型</b>

    FA模型訪問(wèn)Stage模型DataShareExtensionAbility說(shuō)明

    FA模型訪問(wèn)Stage模型DataShareExtensionAbility 概述 無(wú)論FA模型還是Stage模型,數(shù)據(jù)讀寫(xiě)功能都包含客戶端和
    發(fā)表于 06-04 07:53

    基于RAKsmart云服務(wù)器的AI大模型實(shí)時(shí)推理方案設(shè)計(jì)

    面對(duì)高并發(fā)請(qǐng)求、嚴(yán)格的響應(yīng)延遲要求及波動(dòng)的業(yè)務(wù)負(fù)載,傳統(tǒng)本地化部署的算力瓶頸愈發(fā)顯著。RAKsmart云服務(wù)器憑借其彈性計(jì)算資源池、分布式網(wǎng)絡(luò)架構(gòu)與全棧AI加速能力,為AI大模型實(shí)時(shí)推理提供了從硬件到軟件層的系統(tǒng)性解決方案。
    的頭像 發(fā)表于 05-13 10:33 ?713次閱讀

    AI原生架構(gòu)升級(jí):RAKsmart服務(wù)器在超大規(guī)模模型訓(xùn)練中的算力突破

    近年來(lái),隨著千億級(jí)參數(shù)模型的崛起,AI訓(xùn)練對(duì)算力的需求呈現(xiàn)指數(shù)級(jí)增長(zhǎng)。傳統(tǒng)服務(wù)器架構(gòu)在應(yīng)對(duì)分布式訓(xùn)練、高并發(fā)計(jì)算和顯存優(yōu)化等場(chǎng)景時(shí)逐漸顯露瓶頸。而RAKsmart為超大規(guī)模模型訓(xùn)練提供了全新的算力解決方案。
    的頭像 發(fā)表于 04-24 09:27 ?896次閱讀

    KaihongOS操作系統(tǒng)FA模型與Stage模型介紹

    的運(yùn)行環(huán)境。FA模型的開(kāi)發(fā)方式為通過(guò)導(dǎo)出匿名對(duì)象、固定入口文件的方式指定應(yīng)用組件。開(kāi)發(fā)者無(wú)法進(jìn)行派生,不利于擴(kuò)展能力。 Stage模型 Stage模型是KaihongOS API 9
    發(fā)表于 04-24 07:27
    南昌县| 青神县| 玛曲县| 且末县| 乌鲁木齐县| 安庆市| 红桥区| 阿瓦提县| 炉霍县| 余干县| 紫云| 会理县| 莲花县| 河北区| 衡南县| 阿荣旗| 北碚区| 衡水市| 哈密市| 分宜县| 临夏市| 天长市| 麻栗坡县| 宜丰县| 江川县| 北宁市| 四川省| 蛟河市| 通山县| 伊宁市| 五常市| 东源县| 玛纳斯县| 柘荣县| 钟山县| 宕昌县| 龙江县| 景德镇市| 金昌市| 搜索| 肥西县|