套接字聊天室原理(十)

2021-06-18 18:58:55 字數 2713 閱讀 3090

socket的英文原義是「孔」或者「插座」。

作為程序通訊機制,取後一種意思,通常也稱作「套接字」,

用於描述ip位址和埠,是乙個通訊連的控制代碼(其實就是兩個程式通訊用的)

socket非常類似於**插座,**通話雙方相當於相互通訊的2格程式,**號碼就是ip位址,任何使用者在通話之前,

首先要占有一部**機,相當於申請乙個socket,同時要知道對方的號碼,相當於對方有乙個固定的socket,然後向

對方撥號呼叫,相當於發出連線請求,對方假如在場並空閒,拿起**話筒,雙方就可以正常通話,相當於連線成功,

雙方通話的過程,是一方向**機發出資料和從socket接受資料,通話結束後,一方掛起**相當於關閉socket,撤銷連線。

在iinternet上有很多這樣的主機,這些主機一般執行了多個服務軟體,同時提供幾種服務。每種服務都開啟乙個socket,

並繫結到乙個埠上,不同的埠對應於不同的服務(應用程式)。 

例如:http使用80埠,ftp使用21埠 smtp使用23埠

有兩種型別:

流式socket(stream):

是一種面向連線的socket,針對於面向連線的tcp服務應用。,

安全但是效率低。

資料報告socket(adtagram):是一種無連線的socket,對應於無連線的udp服務應用,

不安全(丟失,順序混亂,在接收端

要分析重排及要求重發),但是

效率高。

socket應用模式

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

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

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

伺服器端的socket

至少需要兩個

乙個負責接收客戶端連線

每成功接收到乙個客戶端的連線便在服務端產生乙個對應的socket(在接收到客戶端連線時建立,

為每個連線成功的客戶端建立乙個對應的socket)

客戶端的socket

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

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

socket通訊過程

伺服器端

1.申請乙個socket

//建立服

務端負責

監聽的套

接字引數

(使用ip4定址協

議,使用

流式連線

,使用tcp協議傳

輸資料)

socket socketwatch 

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

2.繫結到乙個ip位址和乙個埠上

//獲取文

本框中的ip位址

ipaddress address 

= ipaddress.parse(txtip.text.trim());

//建立包

含ip和埠

的網路節

點物件

ipendpoint endpoint 

=new ipendpoint(address, 

int.parse(txtport.text.trim()));

//將負責

監聽的套

接字繫結

到唯一的ip和埠

上 socketwatch.bind(endpoint);

3.開啟偵聽,等待接受連線

//開始監

聽客戶端

請求注意

:accept方法會

阻斷當前

執行緒。

socket cokconnection 

= socketwatch.accept();

客戶端1.申請乙個socket

//建立套

接字socket socketclient 

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

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

//獲取ip

ipaddress address 

= ipaddress.parse(txtip.text.trim());

//建立包

含ip和埠

的節點

ipendpoint endpoint 

=new ipendpoint(address, 

int.parse(txtport.text.trim()));

//申請連

接 socketclient.connect(endpoint);

3.伺服器端接到連線請求後,

產生乙個新的socket(埠大於1024)與客戶端連線並進行通訊,

原偵聽socket繼續偵聽。

概念圖:

實現傳送檔案

設計「協議」

把要傳遞的位元組陣列前面都加上乙個位元組做為

標識,0表示文字,1表示檔案。

文字:0+文字(位元組陣列表示)

檔案:1+檔案的二進位制資訊 

mysql 聊天室 聊天室php mysql 六

聊天室php mysql 六 相應的 資料庫 phpmyadmin mysql dump 主機 localhost 3306 資料庫 study28 資料表的結構 chat user create table chat user userid varchar 20 not null,passwd v...

MFC 非同步套接字程式設計舉例 網路聊天室程式

網路聊天室程式 mfc 利用win32的擴充套件函式 int wsastartup word wversionrequested,lpwsadata lpwsadataword wversionrequested wsadata wsadata int err wversionrequested m...

聊天室程式

伺服器 include include include include include include include include define servport 8081 伺服器端口號 define bufsize 200 最大傳輸量 int main int args,char argv s...