国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程接口 Socket API 解讀(8)

這篇具有很好參考價(jià)值的文章主要介紹了【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程接口 Socket API 解讀(8)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

?????????Socket 是網(wǎng)絡(luò)協(xié)議棧暴露給編程人員的 API,相比復(fù)雜的計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議,API 對(duì)關(guān)鍵操作和配置數(shù)據(jù)進(jìn)行了抽象,簡(jiǎn)化了程序編程。

? ? ? ? 本文講述的 socket 內(nèi)容源自 Linux man。本文主要對(duì)各 API 進(jìn)行詳細(xì)介紹,從而更好的理解 socket 編程。


socket(7)

1.庫(kù)

標(biāo)準(zhǔn) c 庫(kù),libc, -lc

2.頭文件

<sys/socket.h>

3.接口定義

       sockfd = socket(int socket_family, int socket_type, int protocol);

4.接口描述

? ? ? ?本文主要描述 Linux 網(wǎng)絡(luò)套接字層的用戶(hù)編程接口。 BSD 兼容的套接字是用戶(hù)進(jìn)程和內(nèi)核網(wǎng)絡(luò)協(xié)議棧的統(tǒng)一接口。各協(xié)議模塊被分配不同的協(xié)議家族(AF_INET、AF_IPX、AF_PACKET 等)以及不同的套接字類(lèi)型(如 SOCK_STREAM、SOCK_DGRAM),參考 socket(2) 獲取更多關(guān)于協(xié)議家族和類(lèi)型的信息。

套接字層函數(shù)

? ? ? ? 這些套接字層函數(shù)是用戶(hù)進(jìn)程用來(lái)發(fā)送和接收數(shù)據(jù)包以及其他套接字操作。

? ? ? ? socket(2) 創(chuàng)建一個(gè)套接字,connect(2) 連接一個(gè)套接字到一個(gè)遠(yuǎn)程套接字地址,bind(2) 將一個(gè)套接字綁定到一個(gè)本地套接字地址上,listen(2) 告知套接字有新連接需要被接受,accept(2) 用來(lái)獲取新來(lái)連接的新的套接字,socketpair(2) 返回兩個(gè)連接的匿名套接字(只有類(lèi)似 AF_UNIX 的本地套接字才有這個(gè)實(shí)現(xiàn))。

? ? ? ? send(2)、sendto() 和 sendmsg(2) 在套接字上發(fā)送數(shù)據(jù),recv(2)、recvfrom、recvmsg(2) 從套接字上接收數(shù)據(jù)。poll(2) 和 select(2) 等待數(shù)據(jù)來(lái)臨或者是否發(fā)送數(shù)據(jù)就緒。此外,標(biāo)準(zhǔn)的 I/O 操作類(lèi)似 write(2)/writev(2)/sendfile(2)/read(2)/readv(2) 可以用來(lái)讀寫(xiě)套接字上的數(shù)據(jù)。

? ? ? ? getsockname(2) 返回本地套接字地址,getpeername(2) 返回遠(yuǎn)程套接字地址。getsockopt(2) 和 setsockopt(2) 用來(lái)設(shè)置/獲取套接字層或者協(xié)議層選項(xiàng)。ioctl(2) 可以用來(lái)設(shè)置或者讀取一些其他選項(xiàng)。

? ? ? ? close(2) 用來(lái)關(guān)閉一個(gè)套接字。shutdown(2) 關(guān)閉全雙工套接字雙方。

? ? ? ? Seeking 或者 pread(2)、pwrite(2) 這種從非 0 位置讀寫(xiě)操作套接字是不支持的。

? ? ? ? 可以通過(guò) fcntl(2) 來(lái)設(shè)置一個(gè)套接字文件描述符的非阻塞標(biāo)記,實(shí)現(xiàn)套接字的非阻塞 I/O 操作。一旦設(shè)置,套接字上所有可能導(dǎo)致阻塞狀態(tài)通常都會(huì)返回 EAGAIN(表示操作稍后需要重試),connect(2) 會(huì)返回 EINPROGRESS 錯(cuò)誤。用戶(hù)可以通過(guò) poll(2) 或者 select(2) 來(lái)等待各種事件。

I/O 事件
事件 輪詢(xún)標(biāo)記 發(fā)生時(shí)機(jī)
POLLIN 新數(shù)據(jù)到達(dá)
POLLIN 一個(gè)連接配置已完成(對(duì)于面向連接的套接字)
POLLHUP 對(duì)端發(fā)起了斷開(kāi)連接請(qǐng)求
POLLHUP 連接斷開(kāi)了(對(duì)于面向連接的套接字),當(dāng)寫(xiě)套接字時(shí),會(huì)發(fā)送 SIGPIPE 信號(hào)
寫(xiě) POLLOUT 套接字具有足夠的空間來(lái)寫(xiě)入新數(shù)據(jù)
讀寫(xiě) POLLIN/POLLOUT 向外連接的 connect(2) 完成
讀寫(xiě) POLLERR 發(fā)生了異步錯(cuò)誤
讀寫(xiě) POLLHUP 對(duì)端關(guān)閉了一個(gè)方向的連接
異常 POLLPRI 緊急數(shù)據(jù)到達(dá),隨后會(huì)發(fā)送 SIGURG。

?????????另一個(gè)代替 poll(2)/select(2) 的方式是內(nèi)核通過(guò) SIGIO 信號(hào)通知應(yīng)用程序,對(duì)于這種方式,必須通過(guò) fcntl(2) 來(lái)設(shè)置套接字文件描述符的 O_ASYNC 標(biāo)記,然后通過(guò) sigaction(2) 安裝 SIGIO 的信號(hào)處理函數(shù),可以參考后面關(guān)于信號(hào)的討論。

套接字地址結(jié)構(gòu)

? ? ? ? 每個(gè)套接字域(domain)都有自己的套接字地址格式。每個(gè)結(jié)構(gòu)以一個(gè)整型的“家族”字段(sa_family_t) 來(lái)指示地址結(jié)構(gòu)的類(lèi)型,各種系統(tǒng)調(diào)用,比如 connect(2)、bind(2)、accept(2)、getsockname(2)、getpeername(2) 是各個(gè)套接字域通用的,可以通過(guò)家族和類(lèi)型來(lái)區(qū)分不同域的特定套接字地址。

? ? ? ? 為了允許任何類(lèi)型的套接字地址都可以傳遞到各個(gè)套接字 API,我們定義了 struct sockaddr,目的是將各域特定的地址類(lèi)型轉(zhuǎn)換為通用的類(lèi)型,避免調(diào)用套接字 API 時(shí)編譯器報(bào)告類(lèi)型不匹配警告。

? ? ? ? 此外,套接字 API 也提供了 struct sockaddr_storage 數(shù)據(jù)類(lèi)型。這個(gè)類(lèi)型足以裝下所有域特定的套接字地址結(jié)構(gòu),并且處理了對(duì)齊問(wèn)題。(尤其是它已經(jīng)能夠裝下 IPv6 套接字地址。)數(shù)據(jù)結(jié)構(gòu)包含下面的字段,這個(gè)字段可以用來(lái)識(shí)別結(jié)構(gòu)中實(shí)際存儲(chǔ)的套接字地址類(lèi)型:

    sa_family_t ss_family;

? ? ? ? sockaddr_storage 結(jié)構(gòu)在以通用方式處理套接字地址時(shí)非常有用(也就是程序同時(shí)處理 IPv4 和 IPv6 套接字地址)。

?套接字選項(xiàng)

? ? ? ? 下面列出的套接字選項(xiàng)可以通過(guò) setsockopt(2) 來(lái)設(shè)置,也可以通過(guò) getsockopt(2) 設(shè)置套接字級(jí)別參數(shù)為 SOL_SOCKET 來(lái)讀取這些選項(xiàng)。除非特別說(shuō)明,否則 optval 是一個(gè)指向整型數(shù)據(jù)的指針。

? ? ? ? SO_ACCEPTCONN

? ? ? ? 返回值指示套接字是否被標(biāo)記為可以通過(guò) listen(2) 接收連接。返回 0 表示非可監(jiān)聽(tīng)套接字,返回 1 表示是一個(gè)監(jiān)聽(tīng)套接字。這個(gè)選項(xiàng)是只讀的。

? ? ? ? SO_ATTACH_FILTER(Linux 2.2 后),SO_ATTACH_BPF(Linux 3.19 后)

? ? ? ? 掛載一個(gè)經(jīng)典的 BPF(SO_ATTACH_FILTER)或者擴(kuò)展 BPF 程序到套接字上,來(lái)過(guò)濾進(jìn)來(lái)的數(shù)據(jù)包。如果程序返回 0,那么數(shù)據(jù)包會(huì)被丟棄,如果返回值比數(shù)據(jù)包長(zhǎng)度小,那么數(shù)據(jù)包會(huì)被截?cái)?。如果返回值大于等于?shù)據(jù)包長(zhǎng)度,那么數(shù)據(jù)包可以被原封不動(dòng)的處理。

? ? ? ? SO_ATTACH_FILTER 定義在 <linux/filter.h> 中,是一個(gè) sock_fprog 類(lèi)型的結(jié)構(gòu)體:

                  struct sock_fprog {
                      unsigned short      len;
                      struct sock_filter *filter;
                  };

? ? ? ? ?SO_ATTACH_BPF 的參數(shù)是一個(gè)通過(guò) bpf(2) 系統(tǒng)調(diào)用返回的文件描述符,必須指向一個(gè) BPF_PROG_TYPE_SOCKET_FILTER 類(lèi)型的程序。

? ? ? ? 對(duì)于指定套接字,這些選項(xiàng)可以設(shè)置多次,新的設(shè)置會(huì)覆蓋之前的設(shè)置。經(jīng)典和擴(kuò)展版本可以在同一個(gè)套接字上使用,但是之前的過(guò)濾器總是會(huì)被新的過(guò)濾器代替,也就是說(shuō)一個(gè)套接字上同一時(shí)刻只能定義一個(gè)過(guò)濾器。

? ? ? ? 經(jīng)典和擴(kuò)展 BPF 在 Linux 內(nèi)核源碼文件 /Documentation/networking/filter.txt 中有解釋。

SO_ATTACH_REUSEPORT_CBPF,SO_ATTACH_REUSESETPORT_EBPF

? ? ? ? 在使用 SO_REUSEPORT 選項(xiàng)時(shí),用戶(hù)可以用這些選項(xiàng)來(lái)設(shè)置經(jīng)典 BPF(SO_ATTACH_REUSEPORT_CBPF) 或者擴(kuò)展 BPF(SO_ATTACH_REUSEPORT_EBPF)程序,這些程序定義了reuseport 端口組中的套接字的數(shù)據(jù)包如何過(guò)濾(也就是所有設(shè)置了 SO_REUSEPORT 并使用相同本地地址接收數(shù)據(jù)包的套接字)。

? ? ? ? BPF 程序必須返回一個(gè) 0 到 N-1 的索引值表示哪個(gè)套接字應(yīng)該接收數(shù)據(jù)包(N 是套接字組中套接字的數(shù)量)。如果 BPF 程序返回非法索引值,套接字選擇會(huì)回退到?jīng)]設(shè)置這些選項(xiàng)時(shí)的?SO_REUSEPORT 機(jī)制。

? ? ? ? 為了將套接字加入到組中,每個(gè)套接字都按照加入的順序編號(hào)(即,UDP 套接字按照 bind(2) 調(diào)用的順序, TCP 套接字按照 listen(2) 調(diào)用的順序)。新加入 reuse 組的套接字會(huì)繼承 BPF 程序,移除時(shí),最后一個(gè)套接字會(huì)移動(dòng)到該套接字位置。

? ? ? ? 這些選項(xiàng)可以在組內(nèi)任何套接字上設(shè)置多次,來(lái)更新組內(nèi)所有套接字使用的 BPF 程序。

? ? ? ? SO_ATTACH_REUSEPORT_CBPF 和 SO_ATTACH_FILTER 攜帶相同的參數(shù)類(lèi)型,SO_ATTACH_REUSEPORT_EBPF 和 SO_ATTACH_BPF 攜帶相同的參數(shù)類(lèi)型。

? ? ? ? UDP 從 Linux 4.5 后支持這個(gè)特性,TCP 是從 Linux 4.6 后支持的。

SO_BINDTODEVICE

? ? ? ? 將一個(gè)套接字綁定到特定的諸如 "eth0" 這樣的設(shè)備上,在傳遞的接口名稱(chēng)中指定。如果名字是一個(gè)空字符串或者選項(xiàng)長(zhǎng)度是 0,那么套接字綁定會(huì)被移除。傳進(jìn)來(lái)的選項(xiàng)是一個(gè)變長(zhǎng)、‘\0’ 結(jié)尾的接口名稱(chēng)字符串,最大長(zhǎng)度為 IFNAMESIZ。如果套接字被綁定到特定接口,那么套接字只會(huì)處理該接口進(jìn)來(lái)的數(shù)據(jù)包。值得注意的是,這個(gè)只對(duì)特定套接字類(lèi)型有用,尤其是 AF_INET 套接字。分組(packet)套接字不支持這個(gè)特性(使用普通的 bind(2))。

? ? ? ? 在 Linux 3.8 之前,這個(gè)套接字選項(xiàng)可以設(shè)置但是不能通過(guò) getsockopt(2) 獲取,Linux 3.8 后就可以讀了。optlen 參數(shù)包含用于接收設(shè)備名字的緩沖區(qū)大小,建議設(shè)置為 IFNAMSIZ 字節(jié),真實(shí)的設(shè)備名字長(zhǎng)度會(huì)在 optlen 參數(shù)報(bào)告出來(lái)。

SO_BROADCAST

? ? ? ? 設(shè)置/獲取廣播標(biāo)記。開(kāi)啟后,數(shù)據(jù)報(bào)套接字可以向廣播地址發(fā)送數(shù)據(jù)包,這個(gè)選項(xiàng)對(duì)于流套接字無(wú)效。

SO_BSDCOMPAT

? ? ? ? 開(kāi)啟 BSP 錯(cuò)誤兼容。這個(gè)只在 Linux 2.0 和 2.2 的 UDP 協(xié)議模塊中使用。如果使能,UDP 套接字的 ICMP 錯(cuò)誤不會(huì)被傳遞給用戶(hù)程序,后面的內(nèi)核版本中逐步淘汰這個(gè)選項(xiàng)。Linux 2.4 悄悄的忽略這個(gè)設(shè)置,Linux 2.6 會(huì)在用戶(hù)設(shè)置這個(gè)選項(xiàng)時(shí)生成內(nèi)核警告(printk())。Linux 2.0 對(duì)于原始套接字默認(rèn)開(kāi)啟了這個(gè)選項(xiàng),但是很快就在 Linux 2.2 中就移除了這個(gè)設(shè)置。

SO_DEBUG

? ? ? ? 開(kāi)啟套接字調(diào)試。只允許具有 CAP_NET_ADMIN 能力、或者有效用戶(hù) ID 為 0 的進(jìn)程設(shè)置開(kāi)啟該選項(xiàng)。

SO_DETACH_FILTER(Linux 2.2 后),SO_DETACH_BPF(Linux 3.19 后)

? ? ? ? 這兩個(gè)選項(xiàng)意思相同,可以用來(lái)移除套接字上使用 SO_ATTACH_FILTER 或者 SO_ATTACH_BPF 綁定的經(jīng)典/擴(kuò)展 BDF 程序,選項(xiàng)值會(huì)被忽略。

SO_DOMAIN(Linux 2.6.32 后)

? ? ? ? 獲取套接字的域(整數(shù)值),返回類(lèi)似 AF_INET6 這樣的值,參考 socket(2) 更多詳細(xì)信息,這個(gè)套接字選項(xiàng)是只讀的。

SO_ERROR

? ? ? ? 獲取/清除套接字上的錯(cuò)誤。這個(gè)套接字選項(xiàng)也是只讀的,返回一個(gè)整型數(shù)值。

SO_DONTROUTE

? ? ? ? 不要通過(guò)網(wǎng)關(guān)發(fā)送,直接發(fā)送到連接的主機(jī)。這個(gè)和 send(2) 時(shí)設(shè)置 MSG_DONTROUTE 標(biāo)記效果相同。期待返回整型布爾標(biāo)記。

SO_INCOMING_CPU(Linux 3.19 后可讀取,Linux 4.4 后可設(shè)置)

? ? ? ? 獲取或者設(shè)置套接字的 CPU 親和性,是一個(gè)整型標(biāo)記:

                  int cpu = 1;
                  setsockopt(fd, SOL_SOCKET, SO_INCOMING_CPU, &cpu,
                             sizeof(cpu));

?????????因?yàn)橐粋€(gè)單獨(dú)流上的所有數(shù)據(jù)包都是在一個(gè)特定 CPU 上的 RX 隊(duì)列中到達(dá),這個(gè)選項(xiàng)的典型應(yīng)用是每個(gè) RX 隊(duì)列使用一個(gè)監(jiān)聽(tīng)進(jìn)程,然后將監(jiān)聽(tīng)進(jìn)程和 RX 隊(duì)列處理進(jìn)程處于同一個(gè) CPU 上。這個(gè)是 NUMA 上的最佳用法,能夠保持 CPU 緩存熱度。

SO_INCOMING_NAPI_ID(Linux 4.12 后可讀取)

? ? ? ? 返回一個(gè)系統(tǒng)級(jí)的唯一 ID,即 NAPI ID,這個(gè) ID 是套接字上最后收到數(shù)據(jù)包所在 RX 隊(duì)列的標(biāo)識(shí)。

? ? ? ? 應(yīng)用程序可以用這個(gè)來(lái)對(duì)不同 RX 隊(duì)列上的數(shù)據(jù)流使用不同的工作線程來(lái)進(jìn)行分流,這就允許每個(gè)工作線程和一個(gè) NIC 硬件接收隊(duì)列關(guān)聯(lián),為這個(gè)上面 RX 隊(duì)列上接收到的所有連接服務(wù)。硬件 NIC 隊(duì)列到應(yīng)用線程上的映射使得 NIC 到應(yīng)用的數(shù)據(jù)流處理更加高效。

SO_KEEPALIVE

? ? ? ? 在面向連接的套接字上開(kāi)啟?;钕l(fā)送,需要的是一個(gè)整型布爾型標(biāo)記。

SO_LINGER

? ? ? ? 設(shè)置/獲取 SO_LINGER 選項(xiàng),參數(shù)是一個(gè) struct linger 結(jié)構(gòu)體:

                  struct linger {
                      int l_onoff;    /* linger active */
                      int l_linger;   /* how many seconds to linger for */
                  };

?????????開(kāi)啟后,close(2) 和 shutdown(2) 操作會(huì)在所有消息都被發(fā)送后才返回,或者達(dá)到了存留超時(shí)值。否則調(diào)用會(huì)立即返回,而關(guān)閉操作會(huì)在后臺(tái)進(jìn)行。exit(2) 中關(guān)閉套接字時(shí),它總是在后臺(tái)留存(linger)。

SO_LOCK_FILTER

? ? ? ? 設(shè)置這個(gè)選項(xiàng)會(huì)阻止修改套接字的過(guò)濾器,這些過(guò)濾器包括通過(guò) SO_ATTACH_FILTER、SO_ATTACH_BPF、SO_ATTACH_REUSEPORT_CBPF、SO_ATTACH_REUSEPORT_EBPF 設(shè)置的。

? ? ? ? 典型的應(yīng)用場(chǎng)景是特權(quán)進(jìn)程設(shè)置一個(gè)原始套接字(一個(gè)需要 CAP_NET_RAW 權(quán)限的操作)、應(yīng)用一個(gè)限制過(guò)濾器、設(shè)置 SO_LOCK_FILTER 選項(xiàng)、然后或者放棄特權(quán)或者通過(guò) UNIX 域套接字將套接字文件描述符傳遞給非特權(quán)進(jìn)程。

? ? ? ? 一旦 SO_LOCK_FILTER 選項(xiàng)開(kāi)啟了,嘗試修改或者移除套接字上的過(guò)濾器或者禁止 SO_LOCK_FILTER 選項(xiàng)會(huì)報(bào)錯(cuò) EPERM。

SO_MARK(Linux 2.6.25 后)

? ? ? ? 設(shè)置由該套接字發(fā)送的數(shù)據(jù)包的標(biāo)記(mark)(和 netfilter MARK 類(lèi)似,只是基于套接字的)。修改標(biāo)記可以用于沒(méi)有 netfilter 或者分組過(guò)濾器的基于標(biāo)記的路由。設(shè)置這個(gè)選項(xiàng)要求 CAP_NET_ADMIN 能力。

SO_OOBINLINE

? ? ? ? 如果這個(gè)選項(xiàng)開(kāi)啟,帶外數(shù)據(jù)會(huì)直接放入接收數(shù)據(jù)流中。否則,帶外數(shù)據(jù)只有在 MSG_OOB 標(biāo)記設(shè)置時(shí)才會(huì)接收時(shí)才會(huì)這樣做。

SO_PASSCRED

? ? ? ? 使能/禁能接收 SCM_CREDENTIALS 控制消息。更多信息,參考 unix(7)。

SO_PASSSEC

? ? ? ? 使能/禁能接收 SCM_SECURITY 控制消息。更多信息,參考 unix(7)。????????

更多選項(xiàng),閱讀下一篇?【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程接口 Socket API 解讀(9)

5.注意

? ? ? ? Linux 假定發(fā)送/接受緩沖區(qū)的一半用于內(nèi)部?jī)?nèi)核結(jié)構(gòu),因此對(duì)應(yīng)的 /proc 文件大小是線上可觀測(cè)大小的兩倍。

? ? ? ? Linux 只有在之前調(diào)用 bind(2) 程序和新程序都設(shè)置了 SO_REUSEADDR 時(shí)才會(huì)允許端口重用。這個(gè)和其他實(shí)現(xiàn)(如 FreeBSD) 只要求新程序設(shè)置就好了是不一樣的,對(duì)于服務(wù)器程序總是設(shè)置這個(gè)選項(xiàng)的情況,這個(gè)區(qū)別是不可見(jiàn)的。

6.示例代碼

? ? ? ? 下面是一個(gè) getsockopt 函數(shù)的使用代碼:

int rc;
int s;
int option_value;
int option_len;
struct linger l;
int getsockopt(int s, int level, int option_name,
char *option_value,
     int *option_len);

?
/* Is out-of-band data in the normal input queue? */
option_len = sizeof(int);
rc = getsockopt(
        s, SOL_SOCKET, SO_OOBINLINE, (
char *) &option_value, &option_len);
if (rc == 0)
{
    if (option_len == sizeof(int))
    {
         if (option_value)
            /* yes it is in the normal queue */
         else
            /* no it is not
                  */
    }
}

?
/* Do I linger on close? */
option_len = sizeof(l);
rc = getsockopt(
        s, SOL_SOCKET, SO_LINGER, (char *) &l, &option_len);
if (rc == 0)
{
    if (option_len == sizeof(l))
    {
         if (l.l_onoff)
            /* yes I linger */
         else
            /* no I do not  */
    }
}

? ? ?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-716268.html

到了這里,關(guān)于【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程接口 Socket API 解讀(8)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程接口 Socket API 解讀(6)

    ?????????Socket 是網(wǎng)絡(luò)協(xié)議棧暴露給編程人員的 API,相比復(fù)雜的計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議,API 對(duì)關(guān)鍵操作和配置數(shù)據(jù)進(jìn)行了抽象,簡(jiǎn)化了程序編程。 ? ? ? ? 本文講述的 socket 內(nèi)容源自 Linux man。本文主要對(duì)各 API 進(jìn)行詳細(xì)介紹,從而更好的理解 socket 編程。 recv()????????? ?遵

    2024年02月07日
    瀏覽(22)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程接口 Socket API 解讀(10)

    ?????????Socket 是網(wǎng)絡(luò)協(xié)議棧暴露給編程人員的 API,相比復(fù)雜的計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議,API 對(duì)關(guān)鍵操作和配置數(shù)據(jù)進(jìn)行了抽象,簡(jiǎn)化了程序編程。 ? ? ? ? 本文講述的 socket 內(nèi)容源自 Linux man。本文主要對(duì)各 API 進(jìn)行詳細(xì)介紹,從而更好的理解 socket 編程。 ? ? ? ? 這個(gè)是 RFC 7

    2024年02月08日
    瀏覽(27)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程接口 Socket API 解讀(8)

    ?????????Socket 是網(wǎng)絡(luò)協(xié)議棧暴露給編程人員的 API,相比復(fù)雜的計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議,API 對(duì)關(guān)鍵操作和配置數(shù)據(jù)進(jìn)行了抽象,簡(jiǎn)化了程序編程。 ? ? ? ? 本文講述的 socket 內(nèi)容源自 Linux man。本文主要對(duì)各 API 進(jìn)行詳細(xì)介紹,從而更好的理解 socket 編程。 ? ? ? ?本文主要描述

    2024年02月08日
    瀏覽(28)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程接口 Socket API 解讀(1)

    ?????????Socket 是網(wǎng)絡(luò)協(xié)議棧暴露給編程人員的 API,相比復(fù)雜的計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議,API 對(duì)關(guān)鍵操作和配置數(shù)據(jù)進(jìn)行了抽象,簡(jiǎn)化了程序編程。 ? ? ? ? 本文講述的 socket 內(nèi)容源自 Linux man。本文主要對(duì)各 API 進(jìn)行詳細(xì)介紹,從而更好的理解 socket 編程。 遵循 POSIX.1 - 2001、POS

    2024年02月09日
    瀏覽(36)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程接口 Socket API 解讀(9)

    ?????????Socket 是網(wǎng)絡(luò)協(xié)議棧暴露給編程人員的 API,相比復(fù)雜的計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議,API 對(duì)關(guān)鍵操作和配置數(shù)據(jù)進(jìn)行了抽象,簡(jiǎn)化了程序編程。 ? ? ? ? 本文講述的 socket 內(nèi)容源自 Linux man。本文主要對(duì)各 API 進(jìn)行詳細(xì)介紹,從而更好的理解 socket 編程。 續(xù) ?【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)

    2024年02月08日
    瀏覽(35)
  • 計(jì)算機(jī)網(wǎng)絡(luò)--網(wǎng)絡(luò)編程(1)

    計(jì)算機(jī)網(wǎng)絡(luò)--網(wǎng)絡(luò)編程(1)

    簡(jiǎn)單認(rèn)識(shí)一下傳輸層中的UDP和TCP: TCP:有鏈接,可靠傳輸,面向字節(jié)流,全雙工 UDP:無(wú)連接,不可靠傳輸,面向數(shù)據(jù)報(bào),全雙工 有鏈接類(lèi)似于打電話,通了就是有鏈接。沒(méi)通就一直在等待。 無(wú)連接類(lèi)似于發(fā)短信,只管發(fā),不管到。 可靠傳輸就是保證信息傳輸?shù)目煽啃?。?/p>

    2024年02月11日
    瀏覽(35)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】4 Socket網(wǎng)絡(luò)編程

    【計(jì)算機(jī)網(wǎng)絡(luò)】4 Socket網(wǎng)絡(luò)編程

    目錄 寫(xiě)在前面的話 概覽 環(huán)境 URL請(qǐng)求程序: 2. 系統(tǒng)時(shí)間查詢(xún) 服務(wù)端 T_TCPServer.py代碼 客戶(hù)端 T_TCPClient.py代碼 運(yùn)行效果 3. 網(wǎng)絡(luò)文件傳輸 服務(wù)端 TF_TCPServer.py代碼 運(yùn)行效果(后面加了遠(yuǎn)程功能,效果圖暫時(shí)還在本地) 4. 網(wǎng)絡(luò)聊天室 服務(wù)端 UDPServer.py代碼 客戶(hù)端 UDPClient.py代碼 運(yùn)

    2024年02月01日
    瀏覽(34)
  • 計(jì)算機(jī)網(wǎng)絡(luò)---網(wǎng)絡(luò)編程套接字(一)

    計(jì)算機(jī)網(wǎng)絡(luò)---網(wǎng)絡(luò)編程套接字(一)

    ? 計(jì)算機(jī)網(wǎng)絡(luò)—網(wǎng)絡(luò)編程套接字之UDP數(shù)據(jù)報(bào)套接字編程 作者介紹: ??作者:偷偷敲代碼的青花瓷????? ??作者的Gitee:代碼倉(cāng)庫(kù) ??系列文章推薦:計(jì)算機(jī)網(wǎng)絡(luò) ——網(wǎng)絡(luò)原理之初識(shí) ??我和大家一樣都是熱愛(ài)編程?,很高興能在此和大家分享知識(shí),希望在分享知識(shí)的同時(shí),能和大

    2023年04月09日
    瀏覽(79)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程套接字(一)

    【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程套接字(一)

    目錄 1.預(yù)備知識(shí) 1.1.理解源IP地址和目的IP地址 1.2.認(rèn)識(shí)端口號(hào) 1.2.1.理解\\\"端口號(hào)\\\"和\\\"進(jìn)程ID\\\" 1.2.2.理解源端口號(hào)和目的端口號(hào) 1.3.認(rèn)識(shí)TCP/UDP協(xié)議 1.3.1.TCP協(xié)議 1.3.2.UDP協(xié)議 1.4.網(wǎng)絡(luò)字節(jié)序 網(wǎng)絡(luò)字節(jié)序和主機(jī)字節(jié)序的轉(zhuǎn)換 2.socket編程接口 2.1.sockaddr結(jié)構(gòu) struct sockaddr_in 的具體結(jié)構(gòu): 2.

    2024年02月08日
    瀏覽(34)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程套接字(二)

    【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程套接字(二)

    簡(jiǎn)單TCP服務(wù)器實(shí)現(xiàn) 我們將會(huì)使用到的頭文件放在 comm.h 文件中 創(chuàng)建套接字 創(chuàng)建過(guò)程和UDP服務(wù)器幾乎完全一樣,除了使用的是TCP服務(wù)器使用的是流式服務(wù)(SOCK_STREAM),UDP使用的是數(shù)據(jù)包服務(wù)(SOCK_DGRAM) 服務(wù)器綁定 綁定的過(guò)程和UDP服務(wù)器也是相同的,可以看著復(fù)習(xí)一下 定義好 st

    2024年02月13日
    瀏覽(35)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包