UDPClint和UDPServer的运行结果


对于UDP的一个应用,我们已经说过了它的UDPClient和UDPServer的具体建立过程了。接下来,这里我们来运行一下我们的例子吧。看看具体的运行结果。

运行例子程序

1、编译例子程序

使用如下命令来编译例子程序:

  1. gcc -Wall -o udpserv udpserv.c  
  2. gcc -Wall -o udpclient udpclient.c 

编译完成生成了udpserv和udpclient两个可执行程序。

2、运行UDPServer程序

执行。/udpserv &命令来启动服务程序。我们可以使用netstat -ln命令来观察服务程序绑定的IP地址和端口,部分输出信息如下:

  1. Active Internet connections only servers)  
  2. Proto Recv-Q Send-Q Local Address Foreign Address State  
  3. tcp 0 0 0.0.0.0:32768 0.0.0.0:* LISTEN  
  4. tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN  
  5. tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN  
  6. tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN  
  7. udp 0 0 0.0.0.0:32768 0.0.0.0:*  
  8. udp 0 0 0.0.0.0:8888 0.0.0.0:*  
  9. udp 0 0 0.0.0.0:111 0.0.0.0:*  
  10. udp 0 0 0.0.0.0:882 0.0.0.0:* 

可以看到udp处有“0.0.0.0:8888”的内容,说明服务程序已经正常运行,可以接收主机上任何IP地址且端口为8888的数据。

如果这时再执行。/udpserv &命令,就会看到如下信息:

  1. bind error: Address already in use 

说明已经有一个服务程序在运行了。

运行UDP Client程序

执行。/udpclient 127.0.0.1命令来启动客户程序,使用127.0.0.1来连接服务程序,执行效果如下:

  1. Hello, World!  
  2. Hello, World!  
  3. this is a test  
  4. this is a test  
  5. ^d 

输入的数据都正确从服务程序返回了,按ctrl+d可以结束输入,退出程序。

如果服务程序没有启动,而执行客户程序,就会看到如下信息:

  1. $ ./udpclient 127.0.0.1  
  2. test  
  3. read error: Connection refused 

说明指定的IP地址和端口没有服务程序绑定,客户程序就退出了。这就是使用connect)的好处,注意,这里错误信息是在向服务程序发送数据后收到的,而不是在调用connect)时。如果使用tcpdump程序来抓包,会发现收到的是ICMP的错误信息。

相关内容

    暂无相关文章