C 網路程式設計

2021-04-13 10:50:03 字數 2535 閱讀 5057

首先我們解釋一下在網路程式設計時候,經常遇到的幾個概念:同步(synchronous)、非同步(asynchronous)、阻塞(block)和非阻塞(unblock):

所謂同步方式,就是傳送方傳送資料報以後,不等接受方響應,就接著傳送下乙個資料報。非同步方式就是當傳送方傳送乙個資料報以後,一直等到接受方響應後,才接著傳送下乙個資料報。而阻塞套接字是指執行此套接字的網路呼叫時,直到呼叫成功才返回,否則此套節字就一直阻塞在網路呼叫上,比如呼叫streamreader 類的readlin ( )方法讀取網路緩衝區中的資料,如果呼叫的時候沒有資料到達,那麼此readlin ( )方法將一直掛在呼叫上,直到讀到一些資料,此函式呼叫才返回;而非阻塞套接字是指在執行此套接字的網路呼叫時,不管是否執行成功,都立即返回。同樣呼叫streamreader 類的readlin ( )方法讀取網路緩衝區中資料,不管是否讀到資料都立即返回,而不會一直掛在此函式呼叫上。在windows網路通訊軟體開發中,最為常用的方法就是非同步非阻塞套接字。平常所說的c/s(客戶端/伺服器)結構的軟體採用的方式就是非同步非阻塞模式的。

其實在用c#進行網路程式設計中,我們並不需要了解什麼同步、非同步、阻塞和非阻塞的原理和工作機制,因為在.net framewrok sdk中已經已經把這些機制給封裝好了。下面我們就用c#開乙個具體的網路程式來說明一下問題。

一.本文中介紹的程式設計及執行環境

(1).微軟視窗2000 伺服器版

(2)..net framework sdk beta 2以上版本

二.伺服器端程式設計的關鍵步驟以及解決辦法:

在下面接受的程式中,我們採用的是非同步阻塞的方式。

(1).首先要要在給定的埠上面建立乙個"tcplistener"物件偵聽網路上面的請求。當接收到鏈結請求後通過呼叫"tcplistener"物件的"acceptsocket"方法產生乙個用於處理接入連線請求的socket的例項。下面是具體實現**:

//建立乙個tcplistener物件,此物件主要是對給定埠進行偵聽

tcplistener = new tcplistener ( 1234 ) ;

//開始偵聽

tcplistener.start ( ) ;

//返回可以用以處理連線的socket例項

socketforclient = tcplistener.acceptsocket ( ) ;

(2).接受和傳送客戶端資料:

此時socket例項已經產生,如果網路上有請求,在請求通過以後,socket例項構造乙個"networkstream"物件,"networkstream"物件為網路訪問提供了基礎資料流。我們通過命名空間"system.io"中封裝的二個類"streamreader"和"streamwriter"來實現對"networkstream"物件的訪問。其中"streamreader"類中的readline ( )方法就是從"networkstream"物件中讀取一行字元;"streamwriter"類中的writeline ( )方法就是對"networkstream"物件中寫入一行字串。從而實現在網路上面傳輸字串,下面是具體的實現**:

try }

} }

catch ( exception ey )

(3).最後別忘了要關閉所以流,停止偵聽網路,關閉套節字,具體如下:

//關閉執行緒和流

networkstream.close ( ) ;

streamreader.close ( ) ;

streamwriter.close ( ) ;

_thread1.abort ( ) ;

tcplistener.stop ( ) ;

socketforclient.shutdown ( socketshutdown.both ) ;

socketforclient.close ( ) ;

三.c#網路程式設計伺服器端程式的部分源**(server.cs) :

using system ;

using system.drawing ;

using system.collections ;

using system.componentmodel ;

using system.windows.forms ;

using system.data ;

using system.net.sockets ;

using system.io ;

using system.threading ;

using system.net ;

//匯入程式中使用到的名字空間

public class form1 : form

//清除程式中使用的各種資源

protected override void dispose ( bool disposing ) }

base.dispose ( disposing ) ;

} private void initializecomponent ( )

private void form1_closed ( object sender , system.eventargs e ) }

C 網路程式設計

1 ip網路中的每台主機都有乙個ip位址 它是邏輯位址 網際網路上的ip位址具有全球唯一性 4個位元組,192.168.0.16 2 osi將網路分為 tcp ip模型 應用層 應用層 表示層會話層 傳輸層 傳輸層 網路層 網路層 資料鏈路層 網路介面 物理層相同層次之間不可以直接通訊,是虛擬通訊。...

c 網路程式設計

microsoft.framework為應用程式訪問inter 提供了分層的 可擴充套件的以及受管轄的網路服務,其名字空間system.和system.sockets包含豐富的類可以開發多種網路應用程式。類採用的分層結構允許應用程式在不同的控制級別上訪問網路,開發人員可以根據需要選擇針對不同的級別編...

c 網路程式設計

客戶端 client.cpp include stdafx.h include include include using namespace std pragma comment lib,ws2 32.lib 接收資料 void receive pvoid param buf bytes 0 co...