認識socket

来源:https://www.cnblogs.com/XLX-0327/archive/2019/03/27/10605830.html
-Advertisement-
Play Games

socket socket也稱套接字,網路編程的基礎。一般情況下我不喜歡直接去說socket的函數都是怎麼用的,那個很多人都寫出來了,而且肯定比我好的有的是。 但是今天想寫的是我的理解中,產生socket的原因,我覺得只有瞭解socket的本質、機理,才能更靈活的使用他的API。那樣就會知道為什麼要 ...


socket

socket也稱套接字,網路編程的基礎。一般情況下我不喜歡直接去說socket的函數都是怎麼用的,那個很多人都寫出來了,而且肯定比我好的有的是。

但是今天想寫的是我的理解中,產生socket的原因,我覺得只有瞭解socket的本質、機理,才能更靈活的使用他的API。那樣就會知道為什麼要那樣用,會產生怎樣的效果。

給我的感覺是socket就是一個介面,起著承上啟下的作用。它是應用層與傳輸層的中間產物。

為什麼要這樣說?

首先對應用層來說,不管使用怎樣的傳輸協議只要能達到想要的傳輸結果就可以了,它不管你使用了怎樣的傳輸的方式,只要看到結果就

但是對傳輸層來說,要根據不同的需求使用不同的協議(TCP,UDP 等)去傳輸信息。具體結構如下圖所示:

 

 

 

socket函數創建socket:

#include<sys/types.h>

#include<sys/socket.h>

int socket(int domain, int type, int protocol);

函數通過domain判別通信協議,通信協議有:

協議名稱

含義

PF_UNIX,PF_LOCAL

本地通信

AF_INET,PF_INET

IPv4 Internet協議

PF_INET6

IPv6 Internet協議

PF_IPX

IPX-Novell協議

PF_NETLINK

內核用戶界面設備

PF_X25

ITU-T X25 / ISO-8208協議

PF_AX25

Amateur radio AX.25

PF_ATMPVC

原始ATM PVC訪問

PF_APPLETALK

Appletalk

PF_PACKET

底層包訪問

 

 

函數通過type來判別傳輸協議常見的有,流式套接字、數據報套接字、原始套接字等;

名稱

含義

SOCK_STREAM

TCP傳輸方式,可靠傳輸,需要連接

SOCK_DGRAM

UDP傳輸方式不需要連接

SOCK_SEQPACKET

序列化包,提供一個序列化的、可靠的、雙向的基本連接的數據傳輸通道,數據長度定常。每次調用讀系統調用時數據需要將全部數據讀出

SOCK_RAW

RAW類型,提供原始網路協議訪問

SOCK_RDM

提供可靠的數據報文,不過可能數據會有亂序

SOCK_PACKET

一個專用類型

protocol:確定socket到底支持的哪個協議一般情況下使用TCP或者UDP,可以省略為零,系統會預設設置,但是如果使用原始套接字則需進行具體的設置。

此函數會返回一個int類型的數據,同時以此數據去尋找所創建的socket(你可能創建的不止一個socket),若返回值為-1則表示創建socket失敗,若為一個正值則表示創建成功,由於並不是每次創建都是成功的,因此創建socket時要檢測是否創建成功

if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)

    //創建一個使用IPV4,UDP傳輸的socket

        {

                perror("socket");

                exit(EXIT_FAILURE);

        }

總結一句話,socket就是創建一個確定傳輸模式的介面。

此篇博客我有去參考有:

https://blog.csdn.net/xc_tsao/article/details/44123331

https://blog.csdn.net/liuxingen/article/details/44995467

https://blog.csdn.net/qq_33573235/article/details/79292679

大雄技術有限,若有錯誤請指出,共同進步謝謝!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、什麼是負載均衡 一、什麼是負載均衡 負載均衡(Load Balance)其意思就是分攤到多個操作單元上進行執行,例如Web伺服器、FTP伺服器、企業關鍵應用伺服器和其它關鍵任務伺服器等,從而共同完成工作任務。 單從字面上的意思來理解就可以解釋N台伺服器平均分擔負載,不會因為某台伺服器負載高宕機而 ...
  • 安裝對象: MacBook Pro (13 英寸, 2010 年中) 中安裝win7 64位操作系統(原版安裝非Ghost),且只保留win7系統即可。 場景還原: 拿到筆記本時,筆記本中已無Mac OS X系統,使用的是win 10系統,系統卡頓嚴重,鍵盤快捷鍵無效,觸控板右鍵菜單無效。 操作過程 ...
  • 一.Service存在的意義: 防止Pod失聯(服務發現) 定義一組Pod的訪問策略(負載均衡) 支持ClusterIP,NodePort以及LoadBalancer三種類型 Service的底層實現主要有iptables 和ipvs二種網路模式 二.Pod與Service的關係 通過label-s ...
  • yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.r ...
  • locate 查找文件的簡單方法 locate 程式會執行一次快速的路徑名資料庫搜索,並且輸出每個與給定子字元串相匹配的路徑名。 使用時卻發現archlinux出現 於是我找了一下archwiki,發現原來archlinux現在使用更加安全的mlocate來替換原來的locate,於是我進行了下載 ...
  • 測試 TCP 埠: telnel IP PORT nc -vz IP PORT 測試 UDP 埠: nc -vuz IP PORT 其中 -u 表示使用 udp 協議來進行測試。 -u, --udp Use UDP instead of default TCP 具體選項的功能,可以觀察man p ...
  • 博客為日常工作學習積累總結: 環境準備: 系統安裝完成後: 1.配置靜態IP 網卡文件:cat /etc/sysconfig/network-scripts/ifcfg-eth0 配置靜態IP代碼如下 重啟網卡: service network restart systemctl restart n ...
  • 硬體環境 ubuntu 16.04LTS + windows10 雙系統 NVIDIA TiTan XP 顯卡(12G) 軟體環境 搜狗輸入法 顯卡驅動:LINUX X64 (AMD64/EM64T) DISPLAY DRIVER (418.56) https://www.nvidia.cn/Dow ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...