C GJBC 32 4 1使用套接字類庫

2021-05-25 22:22:27 字數 2546 閱讀 6779

32.4.1 

使用套接字的類庫

可以在服務中建立任何功能,例如掃瞄檔案、進行備份或病毒檢查,或者啟動

.net remoting

伺服器。但所有的服務程式總是有一些類似的地方。這種程式必須能啟動

(並返回給呼叫者

),能停止和暫停。下面討論用套接字伺服器實現的程式。

對於windows 2000 或windows xp系統,****** tcp/ip services可以安裝為windows元件的乙個組成部分。****** tcp/ip services的乙個部分是"quote of the day" tcp/ip伺服器,它的縮寫是「qotd」。這個簡單的服務在埠17處監聽,並使用檔案/system32/drivers /etc/quotes中的隨機訊息響應每乙個請求。我們將在這裡建立乙個相似的伺服器,它返回乙個unicode字串,而不是象「qotd」伺服器那樣返回ascii**。

首先建立乙個類庫

quoteserver

,執行伺服器的**。下面詳細解釋

quoteserver.cs

檔案中quoteserver

類的源**:

using system;

using system.io;

using system.threading;

using system.net;

using system.net.sockets;

using system.text;

using system.collections.specialized;

namespace wrox.procsharp.winservices

public quoteserver(string filename) : this(filename, 7890)

public quoteserver(string filename, int port)

readquotes()

是乙個幫助方法,它從建構函式指定的檔案中讀取所有的引用,所有的引用都被新增給

stringcollection

。此外,建立

random

類的乙個例項,用於返回隨機的引用:

protected void readquotes()

streamreader.close();

stream.close();

random = new random();

}另乙個幫助方法是

getrandomquoteoftheday()

,它返回

stringcollection

引用的乙個隨機引用:

protected string getrandomquoteoftheday()

這裡使用了執行緒,因為start()方法不能停下來等待客戶,它必須立即返回給呼叫者(即scm)。如果方法沒有及時返回給呼叫者(30秒),scm就假定啟動失敗:

public void start()

執行緒函式

listener()

建立乙個

tcplistener

例項。在

acceptsocket()

方法中,我們等待客戶進行連線。客戶一連線,

acceptsocket()

就返回乙個與客戶相關聯的套接字。我們使用

socket.send()

,呼叫getrandom quoteoftheday()

把返回的隨機引用傳送給客戶:

protected void listener()

}catch (socketexception e)}除了

start()

方法之外,還需要有其他的方法來控**務:

stop()

、suspend()

和resume():

public void stop()

public void suspend()

public void resume()

另乙個公共方法是

refreshquotes()

。如果包含引用的檔案發生了變化,就要使用這個方法重新讀取檔案:

public void refreshquotes()}}

在伺服器上建立服務之前,首先應該建立乙個測試程式,這個測試程式要建立quoteserver的乙個例項,並呼叫start()。這樣,不需要處理與具體服務相關的問題,就能夠測試服務的功能。測試伺服器必須手動啟動,使用除錯程式,很容易除錯**。

測試程式是乙個c#控制台應用程式testquoteserver,我們必須引用quoteserver類的程式集。包含引用的檔案必須複製到c:/procsharp/winservices目錄中(或者必須在建構函式中改動引數,以指定在什麼地方複製檔案)。在呼叫建構函式之後,就呼叫quoteserver例項的start()方法。start()在建立執行緒之後立即返回,因此,在按下return按鈕之前,控制台應用程式一直處於執行狀態。

static void main(string args)

注意,quoteserver將執行在使用這個程式的本地主機4567埠上——後面的內容將需要在客戶機中使用這些設定

使用SymbianOS套接字API

1.與套接字伺服器建立會話 rsocketsrv socksrv socksrv.connect 2.建立並開啟套接字 rsocket sock sock.open socksrv,3.設定目標位址 tinetaddr類代表了乙個端點的ip位址和埠。tinetaddr addr addr.setad...

socket套接字 TCP使用

使用流程 建立套接字 connect鏈結tcp伺服器 命令 socket物件.connect 伺服器ip,伺服器port 3.收 發資料recv 接收資料的大小 send 傳送資料 4.關閉套接字 import socket def main 建立socekt物件 tcp socket socket...

udp套接字的使用

傳送與接收資料 import socket defmain 建立乙個udp套接字 udp socket socket.socketip 可以使用套接字收發資料 upd socket.sendto hahahah 對方的ip以及port udp socket.sendto b hahaha 192.1...