Linux環境下socket本地通信

最近項目有用到了socket本地通信,故復習一下。之前都是基于本地虛擬機的ip地址通信的,現在項目,Linux單板上面有2個進程需要通信,故用到了本地socket通信,主要其實就是用了sockfd,文件描述符,也叫句柄。

服務端代碼如下:

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <unistd.h>/* 本地通信——基于socket文件進行數據傳遞 */#define SOCK_FILE "my.sock"	 // 定義存儲的socket文件名int main(int argc,char *argv[])
{printf("1. 服務器 創建socket套接字...\n");int sockfd = socket(AF_LOCAL, SOCK_DGRAM, 0);	// UDP協議if( sockfd == -1){perror("socket");return -1;}printf("2. socket套接字關聯到socket文件...\n");struct sockaddr_un addr;	// 本地通信地址類型addr.sun_family = AF_LOCAL;	// 地址簇strcpy(addr.sun_path, SOCK_FILE);// 綁定到物理內存,創建套接字文件int ret = bind(sockfd, (struct sockaddr*)&addr, sizeof(addr));if (ret != 0 ) {perror("bind");return -1;}printf("3. 服務器循環接收數據...\n");while (1) {char buf[1024] = {};ssize_t rb = read(sockfd, buf, sizeof(buf));if (rb == -1) {perror("read");return -1;}// 當客戶端發送"!quit"關閉時,即結束循環if(rb == 0 || strcmp(buf,"!quit")==0)break;printf("receive: %s\n",buf);}printf("4. 服務器讀取數據完畢,關閉服務器...\n");close(sockfd);printf("5. 刪除套接字文件!\n");unlink(SOCK_FILE);return 0;
}

客戶端代碼如下:

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <unistd.h>#define SOCK_FILE "my.sock"	// 定義存儲的socket文件名int main(int argc,char *argv[])
{printf("1. 客戶端創建套接字...\n");int sockfd = -1;sockfd = socket(AF_LOCAL,SOCK_DGRAM,0);if (sockfd == -1) {perror("socket");return -1;}printf("2. 客戶端連接到服務器socket通信地址...\n");struct sockaddr_un addr;addr.sun_family = AF_LOCAL;strcpy(addr.sun_path, SOCK_FILE);// 請求連接,讓socket套接字連接到服務器的通信地址int ret = connect(sockfd,(const struct sockaddr*)&addr,sizeof(addr));if (ret != 0) {perror("connect");return -1;}printf("3. 客戶端循環發送數據...\n");while (1) {printf("請輸入:");char buf[1024] = {};fgets(buf, 1024, stdin);// 將獲取到的換行符替換成'\0'int len = strlen(buf);if (buf[len-1] == '\n') {--len;buf[len] = '\0';}int ret = 0;// 發送數據if ((ret = write(sockfd, buf, len + 1) ) < 0) {perror("write");return -1;}if (ret = 0 || strcmp(buf, "!quit") == 0)break;}printf("4. 關閉客戶端...\n");close(sockfd);return 0;
}

運行結果如下:

server端

client端

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212330.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212330.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212330.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java接入gpt開發

前情提要 本次文章使用編譯器為IDEA2020 使用GPT模型為百度旗下的千帆大模型 如果是個人用或者不流傳出去&#xff0c;可以無腦入&#xff0c;因為會免費送20塊錢&#xff08;夠用上萬次&#xff09; 代金卷查看 正式教程&#xff1a; 百度智能云控制臺 (baidu.com) 按照步…

JMS(Java Message Service)使用指南

介紹 JMS即Java消息服務&#xff08;Java Message Service&#xff09;應用程序接口&#xff0c;是一個Java平臺中關于面向消息中間件&#xff08;MOM&#xff09;的API&#xff0c;用于在兩個應用程序之間&#xff0c;或分布式系統中發送消息&#xff0c;進行異步通信。它是一…

基于單片機智能病床呼叫系統設計

**單片機設計介紹&#xff0c;基于單片機智能病床呼叫系統設計 文章目錄 一 概要二、功能設計設計思路 三、 軟件設計原理圖 五、 程序六、 文章目錄 一 概要 基于單片機的智能病床呼叫系統是一種利用單片機技術設計的醫療設備&#xff0c;它能夠幫助病人在住院期間快速、方便…

國內大廠機器人賽道產品

大疆 大疆無人機自然不必說&#xff0c;除此之外大疆搞機甲大師&#xff0c;教育機器人。 字節 當前字節在機器人領域只是初步探索階段&#xff0c;目前尚未發布相關產品&#xff08;截止至23.12&#xff09;。 管理層想法&#xff1a; 跟已有業務做結合&#xff0c;服務好…

Java設計模式分類

java的設計模式大體上分為三大類&#xff1a; 創建型模式&#xff08;5種&#xff09;&#xff1a;工廠方法模式&#xff0c;抽象工廠模式&#xff0c;單例模式&#xff0c;建造者模式&#xff0c;原型模式。 結構型模式&#xff08;7種&#xff09;&#xff1a;適配器模式&am…

傳感器(一) :IMU / 陀螺儀模塊

IMU / 陀螺儀模塊 一、概述二、注意參數2.1 陀螺儀芯片標準&#xff08;MPU6050)2.2 參數說明 三、IMU模式使用注意事項3.1 IMU模塊安裝注意事項3.2 為什么IMU要安裝在機器中心位置 四、常見陀螺儀芯片品牌 一、概述 IMU全稱為慣性測量單元&#xff0c;可以通過測量物體在三維空…

Linux實用操作

一、各類小技巧&#xff08;快捷鍵&#xff09; 1.1 ctrl c 強制停止 Linux某些程序的運行&#xff0c;如果想要強制停止它&#xff0c;可以使用快捷鍵ctrl c 命令輸入錯誤&#xff0c;也可以通過快捷鍵ctrl c&#xff0c;退出當前輸入&#xff0c;重新輸入 1.2 ctrl d…

Leetcode刷題筆記——摩爾投票法

摩爾投票法的核心思想為對拼消耗。 摩你媽&#xff0c;學不會&#xff01;&#xff01;&#xff01;&#xff01; 229. 多數元素 II - 力扣&#xff08;LeetCode&#xff09;

ReLU(Rectified Linear Unit)和Sigmoid激活函數

ReLU&#xff08;Rectified Linear Unit&#xff09;和Sigmoid都是神經網絡中常用的激活函數。 特點&#xff1a; ReLU是一種簡單而有效的激活函數。它對于正數部分直接返回輸入&#xff0c;對于負數部分返回零。這種非線性轉換有助于網絡學習更復雜的表示。ReLU在許多深度學習…

自治調優!人大金倉解放DBA雙手

數據庫系統的性能是確保整個應用系統高效運轉的關鍵因素&#xff0c;因此數據庫性能調優工作至關重要。KingbaseES通過將人工調優過程內化為數據庫內核&#xff0c;成功實現了自治調優。這種創新的調優方案為DBA提供了更高效且準確的性能調優途徑&#xff0c;同時也顯著降低了數…

23秋 操作系統真題回憶

總結&#xff1a; 量大 綜合性強 結合實驗很緊密具體的題目 不是很記得了 只記了大概希望有人可以一起參與把這個題的答案做出來&#xff0c;有可以的 可以私信我謝謝 需要你們的想法因為可能涉及學校內部的試題&#xff0c;禁止轉載 2013題目 真題 2023題目 進程 代碼執…

構建VREP和MATLAB聯合仿真實驗平臺,控制機械臂末端按照固定軌跡移動

構建VREP和MATLAB聯合仿真實驗平臺&#xff0c;控制機械臂末端按照固定軌跡移動。主要工作如下&#xff1a; &#xff08;1&#xff09;solidworks構建機械臂模型&#xff1b; &#xff08;2&#xff09;將solidworks中構建的模型導入VREP中建立機械臂的多體動力學模型&#xf…

【Unity動畫】什么是任意狀態(Any state)

&#xff08;Any state&#xff09;可以從某個狀態A直接切換到另一個狀態 B\C\D\E\F 比如A到C的過渡&#xff0c;直接設置從Any state 到C的過渡線觸發參數即可。而不需要讓A到C直接在連接&#xff0c;同樣&#xff0c;B到C之間也無需直接鏈接。 這樣設計是在每一個動畫之間都…

HP-UNIX 系統安全基線 安全加固操作

目錄 賬號管理、認證授權 賬號 ELK-HP-UX-01-01-01 ELK -HP-UX-01-01-02 ELK -HP-UX-01-01-03 ??????? ELK-HP-UX-01-01-04 ???????ELK-HP-UX-01-01-05 ???????口令 ELK-HP-UX-01-02-01 ??????? ELK-HP-UX-01-02-02 ??????? ELK-HP…

Spring 核心特性之表達式(SpEL)

Spring 核心特性之表達式(SpEL)_spring spel-CSDN博客 -- 寫的還行 關于SpEL的幾個概念&#xff1a; 表達式&#xff08;“干什么”&#xff09;&#xff1a;SpEL的核心&#xff0c;所以表達式語言都是圍繞表達式進行的。解析器&#xff08;“誰來干”&#xff09;&#xff1…

【論文筆記】Gemini: A Family of Highly Capable Multimodal Models——細看Gemini

Gemini 【一句話總結&#xff0c;對標GPT4&#xff0c;模型還是transformer的docoder部分&#xff0c;提出三個不同版本的Gemini模型&#xff0c;Ultra的最牛逼&#xff0c;Nano的可以用在手機上。】 谷歌提出了一個新系列多模態模型——Gemini家族模型&#xff0c;包括Ultra…

Java 何時會觸發一個類的初始化

Java 何時會觸發一個類的初始化&#xff1f; 使用new關鍵字創建對象訪問類的靜態成員變量 或 對類的靜態成員變量進行賦值調用類的靜態方法反射調用類時&#xff0c;如 Class.forName()初始化子類時&#xff0c;會先初始化其父類&#xff08;如果父類還沒有進行過初始化的話&a…

找不到WMVCORE.dll怎么辦?一鍵解決WMVCORE.dll缺失的詳細方法分享

當打開軟件時提示wmvcore.dll丟失&#xff0c;這可能是由于以下幾個原因導致的&#xff1a; 系統文件損壞&#xff1a;wmvcore.dll是系統文件&#xff0c;可能會因為各種原因&#xff08;如病毒感染、系統錯誤、軟件卸載等&#xff09;而損壞。 軟件依賴問題&#xff1a;某些…

用 Python 自動創建 Markdown 表格

更多資料獲取 &#x1f4da; 個人網站&#xff1a;ipengtao.com Markdown表格是文檔中整理和展示數據的重要方式之一。然而&#xff0c;手動編寫大型表格可能會費時且容易出錯。本文將介紹如何使用Python自動創建Markdown表格&#xff0c;通過示例代碼詳細展示各種場景下的創建…

Linux基礎指令詳解(1)

操作系統的概念 百度百科 操作系統&#xff08;英語&#xff1a;Operating System&#xff0c;縮寫&#xff1a;OS&#xff09;是一組主管并控制計算機操作、運用和運行硬件、軟件資源和提供公共服務來組織用戶交互的相互關聯的系統軟件程序。根據運行的環境&#xff0c;操作系…