1. 程式人生 > >理解套接字和埠

理解套接字和埠

1  套接字程式設計基礎

套接字,英文為socket,是一種雙向的通訊埠。位於網路中的主機通過連線的套接字提供的介面進行資料傳輸。本節將主要介紹使用套接字進行程式設計的一些基本概念。

1.1  套接字與埠

套接字是一種使用標準UNIX檔案描述符(file descriptor)與其他程式通訊的方式。套接字可以看作是處於不同主機之間的兩個程式的通訊連線端點。一方面程式將要傳輸的資訊寫入套接字中,而另一方面則通過讀取套接字內的資料來獲得傳輸的資訊。

 

圖13.1  套接字通訊示意圖

圖13.1所示為使用套接字進行通訊的示意圖。假設存在兩臺主機A與B,在主機A中存在程序C,主機B中存在程序D,當程序C需要將資料送到程序D時,首先將資料寫到套接字中,而程序D可以通過讀取套接字來獲得程序C傳送的資訊。

在網路中,不同計算機是通過IP地址來區分的,也就是說,要將資料由主機A傳送到主機B,只要知道主機B的IP地址就可以確定資料要傳送的目的地。但是,在主機A與B中不可能只有程序C和程序D兩個程序。主機B在收到主機A傳送來的資料後,如何才能確定該資料是傳送給程序D?因此,還需要某種標識資訊,用於描述網路通訊資料發往的程序。TCP/IP協議提出了協議埠的概念,用於標識通訊的程序。

當程序與某個埠繫結後,作業系統會將收到的給該埠的資料送往該程序。與檔案描述符類似,每個埠都有被稱為埠號的整數型別的識別符號,該識別符號用於區分不同的埠。不同協議可以使用相同的埠號進行資料傳輸。例如,TCP使用了344的埠號,UDP同樣可以使用344埠號進行資料傳輸。

埠號為一個16位的無符號整數,其取值範圍為0~65535。低於256的埠被作為系統的保留埠號,主要用於系統程序的通訊,不在這一範圍的埠號被稱為自由埠號,可以由程序自由使用。

埠總結:為了區分一臺主機接收到的資料包應該交給哪個程序來處理,就使用埠號來區別。

轉載處連結:

http://blog.sina.com.cn/s/blog_7124c26901014ncv.html

相關推薦

理解

1  套接字程式設計基礎 套接字,英文為socket,是一種雙向的通訊埠。位於網路中的主機通過連線的套接字提供的介面進行資料傳輸。本節將主要介紹使用套接字進行程式設計的一些基本概念。 1.1  套接字與埠 套接字是一種使用標準UNIX檔案描述符(file descr

多路複用與多路分解;UDP報文段格式;

UDP套接字(目的IP地址,目的埠號),若兩個UDP報文段有不同源IP地址和/或源埠號,但有相同目的IP地址和目的埠號,則這兩個報文段將通過相同的套接字被定向到相同的目的程序。TCP套接字(源IP地址,源埠號,目的IP地址,目的埠號),當一個TCP報文段從網路到達一臺主機時,

實現重用

假如埠被socket使用過,並且利用socket.close()來關閉連線,但此時埠還沒有釋放,要經過一個TIME_WAIT的過程之後才能使用,這是TNN的相當煩銀的,為了實現埠的馬上覆用,可以選擇setsockopt()函式來達到目的。(以下是網上找到的一篇文章的一小段相關例子,試用之後,相當有效果,特此提

accept中的監聽已連線

int accept(int sockfd, struct sockaddr* cliaddr, socklen_t *addrlen); 該函式用於從已完成連線的佇列隊頭返回下一個已完成連線。 其中sockfd為監聽套接字 cliaddr和addrlen由核心填入

socket驅動繫結分析

1. socket()系統呼叫 socket系統呼叫是哪個:socket()有3個引數,因此搜尋SYSCALL_DEFINE3,然後在檢索socket即可。 SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) sock

19-高階I/O函式——標準I/O

之前我們一直使用的read,write函式以及它們的變體recv, send等函式執行I/O,這些函式都是要使用描述符的,通常這些函式都作為unix核心中的系統呼叫實現。 除了以上說的系統呼叫,我們也可以使用標準I/O函式庫(standard I/O libary),這個函式庫由 ANSI

非阻塞epoll

要求: 1、從配置檔案中讀取資料; 2、編寫可滾動的日誌檔案; 3、實現非阻塞套接字,應用epoll; 4、實現心跳檢測(心跳包); 5、分執行緒處理 client.c    客戶機程式 #include "head.h" #include "config.h" #inc

TCP如何區分監聽已連線???

2.10 TCP埠號與併發伺服器 併發伺服器中主伺服器迴圈通過派生一個子程序來處理每個新的連線。如果一個子程序繼續使用伺服器眾所周知的埠來服務一個長時間的請求,那將發生什麼?讓我們來看一個典型的序列。首先,在主機freebsd上啟動伺服器,該主機是多宿的,其IP地址為12.106.32.254和192.1

檢視等狀態 lsof

lsof, LiSt Opened Files, 列出開啟的檔案, 聽起來很簡單的樣子. 但想*nix中很多其他工具一樣, lsof把這件簡單的事情做到了爐火純青. 因為Unix認為”一切皆檔案”, 那麼”開啟的檔案”就不僅僅是傳統意義上開啟的檔案了, 還可以是網路/Un

sanic官方文檔解析之websocket(網絡)handle decorators(處理程序裝飾器)

test decorator 方法 實例化 con tco nic max cor 1,websocket(網絡套接字) 在websocket上Sanic提供了一種簡單使用的抽象化,來設置websocket(網絡套接字) from sanic import Sanic

網路程式設計——1. 理解網路程式設計

1.1 理解網路程式設計和套接字 網路程式設計和套接字概要 1)首先需要物理連線,如今大部分計算機都已經連線到網際網路,因此不用擔心這一點 2)資料傳輸軟體。作業系統會提供名為“套接字”的部件,套接字是網路資料傳輸用的軟體裝置。 構建接電話套接字 1)安裝電

《TCP/IP網路程式設計》第一章:理解網路程式設計 筆記

第一章:理解網路程式設計和套接字 本章程式碼,在TCP-IP-NetworkNote中可以找到。 1.1 理解網路程式設計和套接字 1.1.1構建打電話套接字 以電話機打電話的方式來理解套接字。 呼叫 socket 函式(安裝電話機)時進行的對話: 問:接

根據客戶端獲取客戶機的IP號,其形式為IP:port

char *sock_ntop(const struct sockaddr *sa, socklen_t salen) { char portstr[7]; static char str[128]; switch (sa->sa_family) { ca

linux網路程式設計之介面)、ip、理解

它是網路通訊過程中端點的抽象表示,包含進行網路通訊必需的五種資訊:連線使用的協議,本地主機的IP地址,本地程序的協議埠,遠地主機的IP地址,遠地程序的協議埠。或者說,套接字,是支援TCP/IP的網路通訊的基本操作單元,可以看做是不同主機之間的程序進行雙向通訊的端點,簡單的說就是通訊的兩方的一種約定,用套接字中

網路程式設計、常用的通訊協議、Socket程式設計(SocketServerSocket)、

網路程式設計:     java語言中,提供了一套統一的程式設計介面。很多細節都已經底層化。            所在,可以進行無痛的網路通訊程式設計。            提供的是Socket套接字技術。  --常用的通訊協議:    (1)TCP/IP:在通訊之前,需

Java中理解

java中套接字的理解 什麽是socket,以及兩端ServerSocket和Socket是真正的幹什麽用的,也終於理解到其實普通的socket也就僅僅是普通管道,兩邊通過這個管道互相傳和接受信息。建立Socket連接建立Socket連接至少需要一對套接字,其中一個運行於客戶端,稱為ClientSocket,

走入計算機的第三十四天(基於tcpudp的

recv 設置 內存 tcp list dup lis 不知道 狀態 一 TCP套接字 1 low版TCP套接字 服務器端                              客戶端        2、改進版tcp套接字           服務端   

Socket()在服務器端客戶端之間的基本工作原理

SocketSocket之間的連接過程主要可以概括為以下三步: 服務器建立監聽:客戶端初始化Socket動態庫後創建套接字,然後指定客戶端Socket的地址,循環綁定Socket直至成功,然後開始建立監聽,此時客戶端處於等待狀態,實時監控網絡狀態; 客戶端提出請求:客戶端的Socket向服務器端提出

從零開始學習比特幣(五)--P2P網路建立的流程之的讀取傳送

寫在前面: 本篇文章接續 從零開始學習比特幣開發(四)–網路初始化,載入區塊鏈和錢包,匯入區塊啟動節點 從零開始學習區塊鏈技術(三)-接入比特幣網路的關鍵步驟解析、建立比特幣錢包,以及重要rpc指令 從零開始學習區塊鏈技術(二)–如何接入比特幣網路以及其原理分析 從零開始學習

Django:Error: [WinError 10013] 以一種訪問許可權不允許的方式做了一個訪問的嘗試。(殺佔用程序)

Error: [WinError 10013] 以一種訪問許可權不允許的方式做了一個訪問套接字的嘗試。 1.啟動伺服器的時候提示埠被佔用,Error: [WinError 10013] 以一種訪問許可權不允許的方式做了一個訪問套接字的嘗試。  解決方案 1.查找出被佔用的