老师给的第二个小实验,编写基于数据报套接字的回射程序。使用循环服务器的方法非常简单,只需要使用while循环recvfrom就可以了,因为recvfrom没有接受到数据会阻塞在那,而且UDP不像TCP那样,需要listen、accept等步骤,不用为每个请求建立新的套接字。(个人感觉没有UDP门槛那么高,那么耗费资源,有点来者不拒的感觉~~)
编写并发无连接服务器就有些困难了。百度之,google之,感觉没有查到什么有价值的信息。混合一下网上的资料和自己知识,写一下该如何编写:
对于面向连接的并发服务器而言,每个连接限制了独立的数据收发双方,并发处理往往涉及为对不同客户的请求创建对应的子线程分别处理。由于每个客户在TCP连接上都有唯一的连接套接字进行标识,所以服务器的并发处理很简单。然而,当使用UDP时,由于没有连接存在,并发服务器的设计就没那么容易了。
根据客户需要,可以有两种并发性的设计【摘自Windows网络编程,刘琰主编】:
1.单次交互的客户请求
客户和服务器只进行一次交互,多个线程共享一个端口。
2.多次交互的客户请求
客户与服务器进行多次交互。69是服务器的知名端口,当客户发送后续数据报时,服务器为每个客户创建一个新的套接字,在其上绑定一个临时端口,如2132。然后使用这个套接字处理客户的后续所有数据交互。在客户端,客户在查看到服务器的第一个应答时将其源端口号记录下(临时端口),之后,将剩余数据发往该端口。
在实验中,我是根据第二种方法来设计服务器和客户端的。代码下一篇文章中贴上。