2008/11/03 | JAVA的SOCKET机制
类别(计算机与编程) | 评论(0) | 阅读(83) | 发表于 16:36

最近在搞SOCKET,索性转来一篇JAVA的SOCKET机制的文章,一来给大家共享,二来自己留作收藏。

Socket机制用到的类有Java.net.ServerSocket、java.net.Socket等。服务器端以监听端口号和接受队列长度为参数实例化ServerSocket类,缺省的队列长度是50,以accept()方法接收客户的连接。客户端则直接以服务器的地址和监听端口为参数实例化Socket类,连接服务器,缺省的连接方式是stream socket(区别于datagram socket)。

服务器端和客户端调用getInputStream()和getOutputStream()方法得到输入/输出流。假如以ObjectInputStream和ObjectOutputStream包装Socket的输入/输出流,要注重一点,ObjectOutputStream类实例化时要向底层流写入一个标识码,ObjectInputStream类相应的读入该标识码,假如实例化的次序不当会引起死锁。建议客户服务器两端都先实例化ObjectOutputStream。

因为调用ServerSocket类的accept()方法和Socket输入流的read()方法时会引起线程阻塞,所以应该用setSoTimeout()方法设置超时,缺省的设置是0,即超时永远不会发生。超时的判定是累计式的,一次设置后,每次调用引起的阻塞时间都从该值中扣除,直至另一次超时设置或有超时异常抛出。比如,某种服务需要三次调用read(),超时设置为1分钟,那么假如某次服务三次read()调用的总时间超过1分钟就会有异常抛出,假如要在同一个Socket上反复进行这种服务,就要在每次服务之前设置一次超时。

0

评论Comments

日志分类
首页[666]
计算机与编程[133]
EMU[40]
UFOs[24]
房产[127]
音乐[13]
LOG[0]
经济[120]
影视[3]
物理[7]
数学[8]
社会[105]
职场[9]
生物医学[18]
生活[59]