首先是在服务器端通过一个本地端口号为参数,创建一个ServerSocket对象,这个对象的accept()方法调用后开始等待客户机的进入。
然后客户机使用一个服务器的IP和服务器开放的端口这两个参数创建一个Socket对象,创建成功后,则表示连结上服务器---客户机Socket创建成功的同时,服务器上ServerSocket对象的accept方法也会返回一个Socket对象,这时双方的连结建立成功,中间接上了管道,就可以开始收发数据。
在Socket对象上可以通过调用getInputStream()和getOutputStream分别得到一个输出/输入流对象,双方就可以通过这个输入输出流对象的read()/write()方法调用收发具体的数据,可以像文件操作一样,传输数据
通信完毕后,双方都可以调用自己的Socket对象的close方法,这时连接便可以半闭,如果一方半闭,另外一方的Socket连结对象也无法发送数据,但只要服务器上的ServerSocket未关闭,客户机还可以再次连结服务器,继续从1开始的流程。
最后,一但服务器上的ServerSocket关闭,服务器上关闭了端口接受客户机的连结,那么客户机再也连不上服务器,这时通信过程完全结束
代码注意事项:
端口值范围是1~65535,但是前面的端口一段系统等其他程序都会占用,port值设置大一点比较好,比如9000
ServerSocket对象的accept方法调用必须放在while循环中,才可以使一个客户机连结进入,处理完毕后,服务器再去“等待“下一个客户机来连结;否则,一个客户机处理完毕后,服务器程序就会退出。
服务器有一个缺点就是accept 方法会造成阻塞,要等处理完数据之后才可以进入下一步,所以要使用多线程的方法