UDPClint和UDPServer的運行結果
對于UDP的一個應用,我們已經說過了它的UDPClient和UDPServer的具體建立過程了。接下來,這里我們來運行一下我們的例子吧。看看具體的運行結果。
運行例子程序
1、編譯例子程序
使用如下命令來編譯例子程序:
- gcc -Wall -o udpserv udpserv.c
- gcc -Wall -o udpclient udpclient.c
編譯完成生成了udpserv和udpclient兩個可執行程序。
2、運行UDPServer程序
執行。/udpserv &命令來啟動服務程序。我們可以使用netstat -ln命令來觀察服務程序綁定的IP地址和端口,部分輸出信息如下:
- Active Internet connections (only servers)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- tcp 0 0 0.0.0.0:32768 0.0.0.0:* LISTEN
- tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
- tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN
- tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
- udp 0 0 0.0.0.0:32768 0.0.0.0:*
- udp 0 0 0.0.0.0:8888 0.0.0.0:*
- udp 0 0 0.0.0.0:111 0.0.0.0:*
- udp 0 0 0.0.0.0:882 0.0.0.0:*
可以看到udp處有“0.0.0.0:8888”的內容,說明服務程序已經正常運行,可以接收主機上任何IP地址且端口為8888的數據。
如果這時再執行。/udpserv &命令,就會看到如下信息:
- bind error: Address already in use
說明已經有一個服務程序在運行了。
運行UDP Client程序
執行。/udpclient 127.0.0.1命令來啟動客戶程序,使用127.0.0.1來連接服務程序,執行效果如下:
- Hello, World!
- Hello, World!
- this is a test
- this is a test
- ^d
輸入的數據都正確從服務程序返回了,按ctrl+d可以結束輸入,退出程序。
如果服務程序沒有啟動,而執行客戶程序,就會看到如下信息:
- $ ./udpclient 127.0.0.1
- test
- read error: Connection refused
說明指定的IP地址和端口沒有服務程序綁定,客戶程序就退出了。這就是使用connect()的好處,注意,這里錯誤信息是在向服務程序發送數據后收到的,而不是在調用connect()時。如果使用tcpdump程序來抓包,會發現收到的是ICMP的錯誤信息。





















