国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Socket采用C/S模型進行設計的服務器模型

Q4MP_gh_c472c21 ? 來源:未知 ? 作者:李倩 ? 2018-03-24 11:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

Socket采用C/S模型進行設計的,即Client/Server,面向客戶端—服務器模型。

每一個Socket都用一個半相關描述:

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

一個完整的Socket則用一個相關描述:

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

一、Socket的類型

Socket有三種類型:

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

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

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

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

數(shù)據(jù)通過相互獨立的報文進行傳輸。并且是無序的、不可靠的傳輸。

3、原始套接字(SOCK_ROW)

原始套接字是我們需要關心的,因為我們的Socket CAN采用的即是原始套接字。該接口允許對較底層協(xié)議進行操作,如IP、ICMP等。原始套接字常用于檢驗新的協(xié)議實現(xiàn)或訪問現(xiàn)有服務中配置的新設備。

套接字的工作流程如下:

先啟動服務器,通過調用socket()函數(shù)建立一個套接字,然后調用bind()函數(shù)將該套接字和本地網(wǎng)絡地址聯(lián)系在一起,再調用listen()函數(shù)使套接字做好偵聽的準備,并規(guī)定它的請求隊列的長度,之后就調用accept()函數(shù)來接收連接。客戶端在建立套接字之后就可調用 connect()和服務器建立連接。連接一旦建立,客戶端和服務器之間就可以通過調用recv()/recvfrom()函數(shù)和send()/sendto函數(shù)來進行發(fā)收數(shù)據(jù)。最后,待數(shù)據(jù)傳送結束后,雙方調用close()函數(shù)關閉套接字。

下面我們來寫兩個簡單的基于Socket的CAN應用程序,但是我們采用的是SOCK_ROW,因此在套接字工作流程上有區(qū)別于SOCK_STREAM和SOCK_DGRAM。由于Socket采用C/S模型進行設計的,所以我們的這兩個程序也分別為Server和Client。

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

int can_recv()

{

int sock_fd;

unsigned long nbytes, len;

struct sockaddr_can addr;

struct ifreq ifr;

/*為了能夠接收CAN報文,我們需要定義一個CAN數(shù)據(jù)格式的結構體變量*/

struct can_frame frame;

struct can_frame *ptr_frame;

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

sock_fd = socket(PF_CAN,SOCK_RAW,CAN_RAW);

/*以下是對CAN接口進行初始化,如設置CAN接口名,即當我們用ifconfig命令時顯示的名字*/

strcpy(ifr.ifr_name,"can0");

ioctl(sock_fd, SIOCGIFINDEX, &ifr);

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

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

addr.can_family = AF_CAN;

addr.can_ifindex = 0;

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

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

/*開始接收數(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ù)打印出來,其中ID為標識符,DLC為CAN的字節(jié)數(shù),DATA為1幀報文的字節(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;

}

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

int can_send()

{

int sock_fd;

unsigned long nbytes;

struct sockaddr_can addr;

struct ifreq ifr;

struct can_frame frame;

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

sock_fd = socket(PF_CAN,SOCK_RAW,CAN_RAW);

/*以下是對CAN接口進行初始化,如設置CAN接口名,即當我們用ifconfig命令時顯示的名字*/

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套接字地址進行綁定*/

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

/*設置CAN幀的ID號,可區(qū)分為標準幀和擴展幀的ID號*/

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);

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

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

return 0;

}

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

以上是對套接字的簡單理解,并附上socket CAN的簡單上層應用代碼。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • CAN
    CAN
    +關注

    關注

    59

    文章

    3067

    瀏覽量

    472757
  • 服務器
    +關注

    關注

    14

    文章

    10253

    瀏覽量

    91496
  • Socket
    +關注

    關注

    1

    文章

    214

    瀏覽量

    36912

原文標題:為了能夠對Socket CAN的深入理解,我們需要了解Socket的機制

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    EtherCAT FOE工作原理揭秘:客戶端-服務器模型如何運轉?

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

    Microchip推出模型語境協(xié)議(MCP)服務器,助力AI驅動的產品數(shù)據(jù)訪問

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

    socket是什么

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

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

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

    DeepSeek模型如何在云服務器上部署?

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

    【HZ-RK3568開發(fā)板免費體驗】基于 Select Poll的TCP發(fā)服務器

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

    如何進行YOLO模型轉換?

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

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

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

    FA模型訪問Stage模型DataShareExtensionAbility說明

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

    基于RAKsmart云服務器的AI大模型實時推理方案設計

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

    AI原生架構升級:RAKsmart服務器在超大規(guī)模模型訓練中的算力突破

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

    RAKsmart高性能服務器集群:驅動AI大語言模型開發(fā)的算力引擎

    RAKsmart高性能服務器集群憑借其創(chuàng)新的硬件架構與全棧優(yōu)化能力,成為支撐大語言模型開發(fā)的核心算力引擎。下面,AI部落小編帶您了解RAKsmart如何為AI開發(fā)者提供從模型訓練到落地的全鏈路支持。
    的頭像 發(fā)表于 04-15 09:40 ?700次閱讀

    AI 推理服務器都有什么?2025年服務器品牌排行TOP10與選購技巧

    根據(jù)行業(yè)數(shù)據(jù),AI推理服務器的性能差異可以達到10倍以上。比如,用普通服務器跑一個700億參數(shù)的大模型,可能需要30秒才能出結果,而用頂級服務器可能只需要3秒。這就是為什么選對
    的頭像 發(fā)表于 04-09 11:06 ?8613次閱讀
    AI 推理<b class='flag-5'>服務器</b>都有什么?2025年<b class='flag-5'>服務器</b>品牌排行TOP10與選購技巧

    如何在RAKsmart服務器上實現(xiàn)企業(yè)AI模型部署

    AI模型的訓練與部署需要強大的算力支持、穩(wěn)定的網(wǎng)絡環(huán)境和專業(yè)的技術管理。RAKsmart作為全球領先的服務器托管與云計算服務提供商,已成為企業(yè)部署AI模型的理想選擇。那么,如何在RAK
    的頭像 發(fā)表于 03-27 09:46 ?939次閱讀

    利用RAKsmart服務器托管AI模型訓練的優(yōu)勢

    AI模型訓練需要強大的計算資源、高效的存儲和穩(wěn)定的網(wǎng)絡支持,這對服務器的性能提出了較高要求。而RAKsmart服務器憑借其核心優(yōu)勢,成為托管AI模型訓練的理想選擇。下面,AI部落小編為
    的頭像 發(fā)表于 03-18 10:08 ?692次閱讀