C TCP Socket網路程式設計(非同步通訊方式)

2021-07-26 16:59:18 字數 2346 閱讀 5457

一、socket程式設計

socket即為套接字,它其實是乙個控制代碼,存在於記憶體中的乙個識別符號,作為網路通訊的乙個符號。

socket類位於system.net.sockets命名空間,封裝了與套接字程式設計相關的api,其內部呼叫了與winsock相關的win32 api。

網路通訊至少有兩個通訊終端,一般來說,監聽並接受連續的一端稱為伺服器,而傳送請求的一方稱為客戶端。

二、socket類的使用步驟

1、伺服器

(1)例項化socket物件。

socket server = new socket(addressfamily.internetwork, sockettype.stream, protocoltype.tcp);
(2)呼叫bind方法繫結本地終結點。需要指定乙個本地ip位址和乙個本地埠,socket將在該終結點上監聽傳入的客戶端連線。(注意繫結餓埠號必須為系統暫未分配的,否則指定埠號無效,無法建立連線)

ipendpoint endpoint = new ipendpoint(ipaddress.any, 8622);

server.bind(endpoint);

(3)呼叫listen方法開始監聽客戶端連線。

server.listen(15);
(4)呼叫accept相關方法接收連線,並返回乙個用於與客戶端進行通訊的socket例項。

server.beginaccept(new asynccallback(accpcallback), server);
private static void accpcallback(iasyncresult ar)

(5)通過send方法和recieve方法進行收發資料。

(6)通訊結束後呼叫close關閉socket物件。

2、客戶端

(1)例項化socket。

socket client = new socket(addressfamily.internetwork, sockettype.stream, protocoltype.tcp);
(2)呼叫connect方法進行連線,需要指定伺服器的位址和埠,伺服器的埠必須與伺服器繫結的監聽埠一致,否則無法連線。

client.connect("127.0.0.1", 8622);
(3)呼叫send和recieve方法收發資料。對於未進行連線的socket物件,可以使用recievefrom和sendto來進行通訊。

(4)通訊結束後關閉socket物件。

3、連線示意圖

三、伺服器,客戶端源**

客戶端:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.net;

using system.net.sockets;

namespace tcpclient

catch (socketexception ex)}}

}

伺服器

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.net;

using system.net.sockets;

namespace tcpserver

private static void accpcallback(iasyncresult ar)}}

注意:以上為兩個專案,必須兩個專案全部執行才能完成客戶端與服務端的連線

如何同時建立兩個專案?在已有的專案基礎上,右鍵解決方案,新建新的專案。

如何同時執行多個專案?開啟解決方案屬性視窗,把啟動方式改為「多啟動專案」,並且將兩個專案都標記為「啟動」。

如何驗證程式的執行步驟?設定斷電,一步步執行,看執行步驟是否為示意圖所示。

執行結果

異或與網路編碼

找出100個數中沒有被選中的乙個,利用了異或的特點,相同得0,相異得1,與0異或得自己。所以a xor b xor a b,這樣他的演算法很快得出了缺失的乙個數。最近聽到某教授大談網路編碼,聽不懂講什麼,他只舉了個例子,於是想到了上面看到的演算法。這是他所說的乙個簡單例子,機器1與機器2通訊,需要伺...

GRE解決異種網路

gre解決異種網路實驗 實驗拓撲如圖,實驗需求如下 要求r1與r3建立gre隧道,隧道位址2020 130 64,並能使pc1與pc2能夠相互通訊 第一步,先進行各裝置的ipv4 ipv6位址配置 r4 ipv6 r4 int g 0 0 0 r4 gigabitethernet0 0 0 ipv6...

線性神經網路(異或)

v np.dot x,w np.dot x,w array矩陣相乘 4 3乘3 1等於4 1 w lr x.t.dot y v int x.shape 0 np.dot x,w array矩陣相乘 3 4乘4 1等於3 1 v np.dot x,w np.dot x,w array矩陣相乘 4 3乘...