Berkeley socket 套接字程式設計詳解

2021-04-22 17:43:06 字數 2453 閱讀 5265

root@bbs

# gcc –o server server.c

root@bbs

# gcc –o client client.c

root@bbs

# ./server

root@bbs

root@bbs$

gcc -o hello hello.c

好了,現在我們已經擁有這個程式的可執行版本了。如果你直接執行這個程式的話,

會出現下面這樣的結果:

root@bbs#./hello

welcome!

hello! world!

root@bbs

#啊,程式將輸出寫出來了,我們成功了!注意!我們需要的是進行網路上的傳輸操作,

現在我們做到的只能夠在本地給你顯示一些字元而已,我們需要的是能夠傳輸到網路的另

一端。6.12.3 /etc/services 和/etc/inetd.conf 檔案

我們必須通過設定系統的兩個檔案:/etc/services 和/etc/inetd.conf 來對系統進行配置,

從而將我們的hello 程式變成網路可訪問的。

下面我們來看看如何設定/etc/services 及/etc/inetd.conf。

在我們更改系統的/etc/services 檔案前我們先來做乙個測試,以便幫助各位讀者能夠對

它的作用有更清楚的理解。

我們在本地機器上輸入下面的命令:

root@bbs

# telnet localhost hello

hello: bad port number

注意系統給出的錯誤資訊:「hello: bad port number」。因為telnet 命令的第二個引數應

該是想登陸系統的埠,我們給出的hello,系統不知道hello 是什麼埠,所以它說:「錯

誤的埠數字」。

那麼下面我們這樣做:

在/etc/services 中加入以下這一行

hello 20001/tcp

其意義為hello 這項服務是在port 20001、是乙個tcp 連線。

當我們進行到這一步的時候,你可以再試試進行剛才給出「hello: bad port number」錯

誤資訊的操作:

root@bbs

# telnet lcoalhost hello

trying 127.0.0.1...

telnet: unable to connect to remote host: connection refused

資訊變了: unable to connect to remote host: connection refused.

第6 章berkeley 套接字- 201 -

這說明系統已經知道了hello 代表的是哪個埠(以為我們上面在/etc/services 檔案中

指定了hello 是乙個tcp 連線,在20001 埠),但是系統無法和hello 埠建立連線,因為

沒有任何程式在監聽20001 埠來等待連線。

ok,現在我們已經告訴了系統我們的hello 程式使用什麼埠了,可是當我們連線hello

的埠的時候系統還沒有將我們的程式執行.下面:

在/etc/inetd.conf 中加入以下這一行:

goodie stream tcp nowait root /full_goodie_path_name/goodie

各個引數的意義為

l service_name 是需要在系統服務中存在的名稱。

l sock_type 有很多種,大多用的是stream/dgram。

l proto 一般用tcp/udp。

l flags 有wait/nowait。

l user 是您指定該程式要以那乙個使用者來啟動,這個例子中用的是root,如果有

安全性的考量,應該要改用nobody。一般來說,建議您用低許可權的使用者,除非必要,不

開放root 使用權。

l server_path 及args,這是您的服務程式的位置及您所想加入的叄數。

接下來重新啟動inetd

root@bbs

# killall inetd

root@bbs

# inetd

root@bbs

#_這樣我們便建立起乙個port 20001 的hello service。

現在我們來檢驗一下goodie 是否可以執行:

telnet localhost 20001

或telnet your_host_name 20001

或telnet locahost hello

執行結果如下:

trying 127.0.0.1...

connected to localhost.

escape character is 『^)』.

welcome!

hello! world!

root@bbs

樹套樹 線段樹套set

請你寫出一種資料結構,來維護乙個長度為 n 的序列,其中需要提供以下操作 1 pos x,將 pos 位置的數修改為 x。2 l r x,查詢整數 x 在區間 l,r 內的前驅 前驅定義為小於 x,且最大的數 數列中的位置從左到右依次標號為 1 n。區間 l,r 表示從位置 l 到位置 r 之間 包...

一套mysql mysql 命令一套

mysql mysql h主機位址 u使用者名稱 p使用者密碼 首先開啟dos視窗,然後進入目錄mysqlin,再鍵入命令mysql u root p,回車後提示你輸密碼.注意使用者名稱前可以有空格也可以沒有空格,但是密碼前必須沒有空格,否則讓你重新輸入密碼.如果剛安裝好mysql,超級使用者roo...

初學樹套樹 線段樹套Treap

樹套樹是乙個十分神奇的演算法,種類也有很多 像什麼樹狀陣列套主席樹 樹狀陣列套值域線段樹 zkw 線段樹套 vector 等等。不過,像我這麼弱,當然只會最經典的線段樹套 treap 啦。線段樹我相信大家都會的,treap 可以看一下這篇部落格 簡析平衡樹 二 treap 線段樹套 treap 的思...