| 此次作業所需的原始程式檔,均在作業一所下載的原始程式檔目錄中,你所要做的只是
進行一些修改動作。
請改寫第五章的 Echo Server (tcpcliserv/tcpserv01.c) 程式, 使 Echo Client (tcpcliserv/tcpcli01.c) 與 server 的連結建立時,在 server 的 螢幕上輸出 client 的 IP address 與 port number。當此連結結束時,同樣在 螢幕上輸出 client 的 IP address 與 port number。 |
|
假設我們先將tcpserv01.c複製成為另一個 hw2serv.c。接下來我們要修改該目錄 (tcpcliserv) 下的 Makefile 內容,讓我們程式改好可以下達 make hw2serv 指令編譯 hw2serv.c。 你可以用 Unix 下的 vi 或 GNOME 桌面下的 gedit 來編輯。 Makefile 中要加的內容如下: |

| 修改完 Makefile 之後,就可以修改 hw2serv.c 了。此次作業要求在 server child
的 str_echo 函數中顯示 client 的位址,不過原來的 tcpserv01.c 中並沒有 str_echo 函數
的原始碼,你必須從 lib/str_echo.c 檔案中將 str_echo 函數的原始碼複製過來再修改。
(直接修改 lib/str_echo.c 檔案中 str_echo 函數的原始碼也可以,但這樣會影響到所有
呼叫 str_echo 函數的程式)
欲顯示 client 的位址可以參考第四章講義的 getpeername 函數。 |
|
修改完後,使用 make hw2serv 指令編譯 hw2serv.c。如果編譯沒問題,就可以執行 hw2serv 這個 server 程式了。 |

|
我們在 Makefile 中指明 hw2serv.c 編譯完後的可執行檔名為 hw2serv。所以我們可以用
./hw2serv & 來執行 server 程式。前面的 ./ 是因為hw2serv並未放在系統執行指令的路徑
中(tcpcliserv 並非系統執行指令會尋找的路徑),所以要告知系統 hw2serv 就放在現目錄
(即./)中。至於 & 是說此程式要在背景執行。
如果之前已經執行過server程式,佔據同樣的 port,則執行時會出現bind錯誤的訊息。 此時用 ps 把佔用的 server 程式找出,用 kill 指令將其殺掉即可。 |
|
執行完 server 程式後,接下來可以執行 client 程式。 如果你的程式可以跑出如下面所示的結果,表示程式初步寫成功了。(用Ctrl-D結束Client程式的執行) |

|
我們要求程式碼必須能夠處理兩個或兩個以上的 client 同時連接至 server 的情形。如下面的執行範例:
|
Maintained by Li-Hsing Yen.