Socket網路程式設計(1)

2021-09-06 12:03:23 字數 2932 閱讀 6845

傳輸層 (transport):傳輸層包括 udp 和 tcp,udp 幾乎不對報文進行檢查,而 tcp 提供傳輸保證。

網路層 (network):網路層協議由一系列協議組成,包括 icmp、igmp、rip、ospf、ip(v4,v6) 等。

鏈路層 (link):又稱為物理資料網路介面層,負責報文傳輸。

按埠號可分為3大類

(1)公認埠(wellknownports):從0到1023,它們緊密繫結(binding)於一些服務。通常這些埠的通訊明確表明了某種服務的協議。例如:80埠實際上總是http通訊。

(2)註冊埠(registeredports):從1024到49151。它們鬆散地繫結於一些服務。也就是說有許多服務繫結於這些埠,這些埠同樣用於許多其它目的。例如:許多系統處理動態埠從1024左右開始。

(3)動態和/或私有埠(dynamicand/orprivateports):從49152到65535。理論上,不應為服務分配這些埠。實際上,機器通常從1024起分配動態埠。

•流式socket(stream):

是一種面向連線的socket,針對於面向連線的tcp服務應用,安全,但是效率低;

•資料報式socket(datagram):

是一種無連線的socket,對應於無連線的udp服務應用.不安全(丟失,順序混亂,在接收端要分析重排及要求重發),但效率高.

1.服務端welcoming socket 開始監聽埠(負責監聽客戶端連線資訊)

2.客戶端client socket連線服務端指定埠(負責接收和傳送服務端訊息)

3.服務端welcoming socket 監聽到客戶端連線,建立connection socket。(負責和客戶端通訊)

伺服器端的socket(至少需要兩個)

•乙個負責接收客戶端連線請求(但不負責與客戶端通訊)

•每成功接收到乙個客戶端的連線便在服務端產生乙個對應的負責通訊的socket

•在接收到客戶端連線時建立.

•為每個連線成功的客戶端請求在服務端都建立乙個對應的socket(負責和客戶端通訊).

客戶端的socket

•客戶端socket

•必須指定要連線的服務端位址和埠。

•通過建立乙個socket物件來初始化乙個到伺服器端的tcp連線。

伺服器端:

•申請乙個socket

•繫結到乙個ip位址和乙個埠上

•開啟偵聽,等待接授連線

客戶端:

•申請乙個socket

•連線伺服器(指明ip位址和埠號)

伺服器端接到連線請求後與客戶端建立連線並進行通訊,原監聽socket繼續監聽。

socket的建構函式:

連線通過建構函式完成。

public socket(addressfamily addressfamily, sockettype sockettype, protocoltype protocoltype)

•addressfamily 成員指定 socket 用來解析位址的定址方案。例如,internetwork 指示當 socket 使用乙個 ip 版本 4 位址連線。

•sockettype 定義要開啟的 socket 的型別

•socket 類使用 protocoltype 列舉向 windows sockets api 通知所請求的協議

如:mysocket = new socket(addressfamily.internetwork,   sockettype.stream, protocoltype.tcp);

addressfamily.internetwork:使用 ip4位址

sockettype.stream:支援可靠、雙向、基於連線的位元組流,而不重複資料。此型別的 socket 與單個對方主機進行通訊,並且在通訊開始之前需要遠端主機連線。stream 使用傳輸控制協議 (tcp) protocoltype 和 internetworkaddressfamily。

protocoltype.tcp:使用傳輸控制協議。

注意:

至少要定義乙個要連線的遠端主機的ip和埠號。

埠號必須在 1 和 65535之間,最好在1024以後。

要連線的遠端主機必須正在監聽指定埠,也就是說你無法隨意連線遠端主機。如:

ipaddress addr = ipaddress.parse("127.0.0.1");

ipendpoint endp = new ipendpoint(addr, 10001);

服務端先繫結:serverwelcomesocket.bind(endp)

客戶端再連線:clientsocket.connect(endp)

5.乙個socket一次只能連線一台主機。

6.socket關閉後無法再次使用。

7.每個socket物件只能一台遠端主機連線. 如果你想連線到多台遠端主機, 你必須建立多個socket物件.

結語

根據之前的學習筆記,關於socket的基礎知識就介紹到這裡,之後會做乙個小案例,可以更好的對socket的理解。主要是專案中需要用到網路程式設計方面的東西,週末沒事幹,就將之前socket的方面的知識點複習了一下,也為了更好更快的投入工作中.....

Socket網路程式設計例項1

socket 對所有上層協議 tcp ip,udp等 的底層封裝。網路上的兩個程式通過乙個雙向的通訊連線實現資料的交換,這個連線的一端稱為乙個socket。建立網路通訊連線至少要一對埠號 socket 協議型別又叫位址簇 socket例項,分別寫在兩個.py裡面,客戶端發出去的內容是小寫的,接收到的...

1 Socket網路程式設計

1.借助伺服器實現小寫轉大寫的程式 客戶端 傳送任意小寫字母到伺服器端。伺服器端 接收小寫字母,轉為大寫,回傳給客戶端,然後客戶端顯示到螢幕。結構體struct sockaddr in的標頭檔案 include toupper 函式標頭檔案 define serv ip 127.0.0.1 ip位址...

網路程式設計(1) Socket收發

短連線 只進行一次收發就是短連線 長連線 傳送訊息後不關閉就是長連線,但會存在粘包等問題。接收 可以寫入乙個迴圈一直接收 trycatch exception e finally if outputstream null catch ioexception e catch exception e 沒...