socket程式設計(1)

鹹魚4號發表於2020-11-19


一、socket相關概念

socket作為程式通行機制,表示的是“插座”的意思,通常也被稱為“套接字”,用於描述IP地址和埠,用於兩個程式通訊使用。

舉個例子:
以電話網為例,電話的通話的雙方就相當於互相通訊的2個程式,電話號碼就是IP地址。在進行通話之前需要有一部手機,手機就相當於申請了一個socket,同時還要知道對方的號碼,相當於對方有一個固定的socket。向對方號碼進行撥號呼叫,相當於發出連線請求。

二、socket的兩種型別

1.流式socket

流式socket是一種面向連線的socket,針對於面向連線的TCP服務應用,安全,但是效率低.

1.1TCP三次握手

客戶端傳送訊息;
服務端回覆訊息
客戶端得到訊息
三次握手的目的是資料接收到以後進行響應,壞處就是效率太低。

2.資料包式socket

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

三、注意事項

在Internet上有很多這樣的主機,這些主機一般執行了多個服務軟體,同時提供幾種服務。每種服務都開啟一個socket,並且繫結到一個埠上,不同的埠對應於不同的服務(應用程式)
例如:http使用80埠,ftp使用21埠,smtp使用25埠
在連線的時候至少要定義一個要連線遠端主機的IP和埠號。
埠號必須在1到65535之間,最好在1024以後,一般使用50000以後的埠號。
要連線的遠端主機必須正在監聽指定埠,也就是說無法隨意連線遠端主機。
例如:
IPAddress addr=IPAddress.Parse(“127.0.0.1”);
IPEndPoint endp=new IPEndPoint(addr.10001);
服務端先繫結:serverWelcomeSocket.Bind(endp)
客戶端再連線:clientSocket.Connect(endp)

四、連線過程簡介

客戶端通過IP地址可以連到伺服器,再通過埠號可以連到需要的應用程式
客戶端和服務端都需要有socket。
伺服器首先需要有一個負責監聽的socket(),負責監聽自己的IP地址和埠號,看看是否有客戶端連線。當監聽到了以後,伺服器需要建立一個socket負責與客戶端進行通訊。
所以伺服器最少只有2個socket,一個負責監聽,一個負責通訊。而客戶端最少可以有一個socket。

1、服務端welcoming socket開始監聽埠(負責監聽使用者端連線資訊)
2、客戶端client socket連線服務端指定埠(負責接收和傳送服務端資訊)
3、服務端welcoming socket監聽到有客戶端連線,建立connection socket(負責和客戶端通過)

相關文章