学校开始学习Socket编程,虽然自己搞的是ASP.NET,但是对Socket也有很大的兴趣,一直不知道如何入门,刚好借此机会跟着学习。Socket的概念就不多写了,Windows环境下的Socket编程是WinSock,现在基本上是2.0,以前还有1.1版,但我想3.0是不会出来了。WinSock继承了伯克利开发的BSD Unix Socket的规范,所以过程都是一样的。WinSock编程一般都“异步非阻塞模式”,现在还未学习到这里,我也不知道如何调用,以后再继续讨论。
关于同步、异步、阻塞、非阻塞。
同步:所有Socket客户端的请求,在得到Socket服务器端的响应后,才返回,继续执行下面的指令。
异步:所有Socket客户端的请求,不用等到Socket服务器端的响应后,就可以返回,继续执行下面的指令。
阻塞模式:调用如recive()函数时,当缓冲区没有内容,该线程挂起,无法继续执行,直到缓冲区有内容为止。
非阻塞模式:调用如recive()函数时,当缓冲区没有内容,立即返回,并返回错误代码。
这是今天看了一天才入门的C# Socket成果,金旭亮老师的博客给了我很大的帮助。
Socket程序一般是没有OO的,遵循函数式的编写方式。
客户端代码:
服务器端代码:
服务器代码先执行,客户端代码后执行。
这个例子中还没有实现socket异常处理机制,也没有实现处理多个并发服务的效果(当同时连接两个客户端,后连接的就无反应了,因为服务器处理在Recive()处阻塞,一直等待先连接的客户端发送消息,后连接的始终在队列中等待)。