SOCKET:
Socket接口介于应用程序与硬件之间。对Socket的理解可以简化为:它是封装了数据流(Stream)的从机器到机器的一条软接线,通过这条软接线,并借助于线两端的收发程序,网络上的机器间实现了信息的交流与互通。分离在软线两端的应用程序(服务器端程序和客户端程序)可以通过调用Socket接口来开发具有TCP/IP网络功能的程序应用。
作为客户端,即要知道服务程序所在房间的房间号(IP地址),又要知道后门的位置(端口)。这样才能正确地进入房间。
數據編發:
软线建立完成后,还必须有数据传输的规则,这就是服务端和客户端商量着来的事情了。数据使用什么封装,传送时遵循什么规则(收发协议)、传输是否采用压缩技术和加解密技术等。将数据封装起来,可以让程序的设计者像操作本地文件一样来操作流动在网络上的信息。不同的数据封装方式将决定客户端和服务器端数据的访问方式。编发类型仅限于标量(基本型别)和字符串对象。複雜對象需要我们考虑有关对象到字节的串行化以及字节流到对象的还原问题。
多線程
作为一种例程服务,必须要考虑其同时服务于多用户的问题。这个问题的解决可以通过线程技术来实现,而且相当简单。基本思路是:在服务器内产生单一的监听Socket,并循环调用accept()等待新的软线连接。Accept()每返回一次,就会带回与特定客户有关的Socket,将该Socket的运作安排到一个独立的线程中,这样其服务就是针对特定客户的了。考虑到多线程对共享资源访问时的同步问题如果处理不当就会造成线程的不安全,必须为临界区设置线程锁。
基于TCP的收发协议 使用Socket编程,必须明确客户端与服务器端的收发协议。以下是针对该实例定义的收发协议:客户端:发送报头9999,发送用户名(String),发送密码(String)服务端:接收报头9999,接收用户名和密码,验证登录权限 是合法用户:发送报头9999,发送欢迎信息(String) 是非法用户:发送报头-1,发送警告信息(UTF)客户端:接收报头9999,获取欢迎信息(String)