在java中socket网络编程,怎么关闭,而后重启一个socket

java-socket监听输入流怎么关闭
作者:用户
浏览:967 次
socket监听输入流怎么关闭用java写的,socket连接后另开一个线程实时监听输入流,但是如果服务器那边发生异常中断了,我这边也利用心跳机制知道有异常,需要断掉socket重新连,但是监听输入流
socket监听输入流怎么关闭
用java写的,socket连接后另开一个线程实时监听输入流,但是如果服务器那边发生异常中断了,我这边也利用心跳机制知道有异常,需要断掉socket重新连,但是监听输入流的线程就卡在read的那个方法里了,怎么才能从那个read的阻塞里出来呢?
不对啊,我理解的是如果服务器端异常中断了,那么你这边连接也会报连接关闭异常的吧。
解决方案二:
给你粘贴一个服务端和客户端的代码你瞅瞅吧
import java.net.*;
import java.io.*;
public class Server{
public static void main(String[] args){
InputStream in=
OutputStream out=
ServerSocket ss=new ServerSocket(8888);
Socket socket=ss.accept();
in=socket.getInputStream();
out=socket.getOutputStream();
DataOutputStream dos=new DataOutputStream(out);
DataInputStream dis=new DataInputStream(in);
if((s=dis.readUTF())!=null){
System.out.println(s);
System.out.println(dis.readUTF())
String fileContent = readFileContent("E:\LQ.txt");;
dos.writeUTF(fileContent);
dis.close();
dos.close();
socket.close();
}catch(IOException e) {
e.printStackTrace();
private static String readFileContent(String fileName) throws IOException {
File file = new File(fileName);
BufferedReader bf = new BufferedReader(new FileReader(file));
String content = "";
StringBuilder sb = new StringBuilder();
while(content != null){
content = bf.readLine();
if(content == null){
sb.append(content.trim());
bf.close();
return sb.toString();
import java.net.*;
import java.io.*;
public class Client{
public static void main(String[] args){
InputStream is=
OutputStream os=
Socket socket=new Socket("localhost",8888);
is=socket.getInputStream();
os=socket.getOutputStream();
DataInputStream dis=new DataInputStream(is);
DataOutputStream dos=new DataOutputStream(os);
dos.writeUTF("hello");
if((s=dis.readUTF())!=null);
System.out.println(s);
dis.close();
dos.close();
socket.close();
}catch(IOException e) {e.printStackTrace();}
【云栖快讯】云栖社区技术交流群汇总,阿里巴巴技术专家及云栖社区专家等你加入互动,老铁,了解一下?&&
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
40+云计算产品,6个月免费体验
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
云服务器9.9元/月,大学必备java socket为什么服务端在客户端断开后才能接收到数据
全部答案(共1个回答)
,下次重连的时候就读取文件,继续写
不对,你应该单独写个一个处理线程类,如果需要的连接就new一下,因为每次new一下,线程的名字都不一样,但如果后期要用到销毁的时候,最好写一个hasMap存储这...
在我的微博首页状态下,点击屏幕下方更多,就可以看到草稿箱了
三种接口均为AMD CPU的接口类型,另外还有AM3+的接口,其向下全兼容AM3、AM2+接口的CPU,不同接口只是对针脚的定义不同,没有本质的区别。至于FM1...
咨询当地税务局,或是咨询航天金税软件商。
1.获取客户端ip地址( 这个必须从客户端传到后台):
jsp页面下,很简单,request.getRemoteAddr() ;
因为系统的VIew层是用JSF...
答: 任何一个方向,都分技术、商务(公关、营销)等分支的。如果不是从事技术,了解一下JAVA,也是可以的。
答: 在1990年代末期,为了促进对等网络应用的发展,升阳(SUN)公司增加了一些类到Java技术中,让开发者能开发分散的实时聊天的applet和应用,这是在即时通信...
答: 网景导航者年时推出了版本4.0,大幅度的强化JavaScript再度强化其功能,但同时出现的bug和CSS的误译,使得占有率渐渐被Intern...
1、以身作则,如果连自己都做不好,还怎么当班长?
2、人缘好,我就是由于人缘不好,才改当副班长的。
3、团结同学,我们班有一个班长就是由于不团结同学才不当班长的,他现在是体育委员。
4、要有管理能力,首先要有大嗓门,我们班有位学习委员就是由于声音太轻才以3票之差当不了班长;其次要口齿清楚,让同学能听得懂你说的话;第三要说出有道理的话,让吵闹或打架的同学心服口服;第四,不能包庇好朋友,公正;第五,要搞好师生关系;第六,要严以律己,宽以待人,我们班的第一任班长就是因为“严以待人,宽以律己”才不能继续当下去的。
5、要坚持,我们班的纪律委员就是由于没有恒心,原来的大组长、卫生委员、劳动委员、体育委员、学习委员、小组长等(每个学期都加起来)都被免除了,现在的才当1天的纪律委员要不要免除都在考虑中,还要写说明书。
6、提醒班干部做自己要做的事,要有责任心。我们班的纪律委员就是没有责任心,班长的职务都被罢免了。
7、不要拿出班长的架子,要虚心。
8、关心同学(包括学习)。
9、要及早发现问题,自己可以解决的自己解决;自己不能解决的,早日让班主任解决。
10、要发现班级的好的地方,及时表扬。让全班都照做。
11、不要太担心学习,当个班干部,对以后工作有好处,这是个锻炼的机会,好好当吧,加油!
在高中阶段,学校和老师的规定一般都是为了学生的成绩着想,执行老师的话,其实也是为了大家好。即使有时候打点小报告,只要你的心态的好的,也不是坏事。比如A学习不专心,你用个适当的办法提醒老师去关心他,其实也是为了他好。
总的方针:和同学们组成一个团结的班集体,一切以班集体利益为上(当然不冲突国家、社会和学校利益为前提)。跟上面领导要会说话,有一些不重要的东西能满就满,这对你的同学好,也对你的班好。
再说十五点
一,以德服人
也是最重要的,不靠气势,只靠气质,首先要学会宽容(very important)你才能与众不同,不能和大家“同流合污”(夸张了点),不要有这样的想法:他们都怎么样怎样,我也。如果你和他们一样何来让你管理他们,你凭什么能管理他们?
二,无亲友
说的绝了点,彻底无亲友是不可能,是人都有缺点,有缺点就要有朋友帮助你。不是说,不要交友,提倡交友,但是不能把朋友看的太重,主要不能对朋友产生依赖感,遇到事情先想到靠自己,而不是求助!
三,一视同仁
上边说的无亲友也是为了能更好的能一视同仁,无论是什么关系,在你眼里都应是同学,可能比较难作到,但没有这点,就不可能服众。
四,不怕困难
每个班级里都会一些不听话的那种,喜欢摆谱的那种,不用怕,他们是不敢怎么样的!知难而进才是一个班长应该有的作风。
五,带头作用
我想这点大家都有体会就不多说了
六,打成一片
尽量和大家达成共识,没有架子,不自负不自卑,以微笑面对每一个人,不可以有歧视心理,不依赖老师,有什么事情自己解决,老师已经够累的了。
七,“我是班长”
这句话要随时放在心底,但是随时都不要放在嘴上,有强烈的责任心,时刻以班级的荣誉为主,以大家的荣誉为主。什么事情都冲在最前面。遇事镇定。
八,帮助同学
帮助同学不是为了给大家留下一个好的印象等利益方面的事,是你一个班长的责任,是你应该做的,只要你还是一个班长,你就要为人民服务(夸张)为同学服务。
九,诚实守信
大家应该都知道这个,是很容易作到的,也是很不容易作到,然这两句话并不是矛盾的,不是为了建立一个好的形象,和班级责任也没有什么关系,只是一个人应该有的道德品质。但你必须作到,连这样都做不到,就不可能做成一个好的班长。
十,拿的起放的下
学会放弃也同样重要,学会辨别好与坏。知道什么是该做的,什么是不该做的。
十一,谦虚
认真分析同学给你提的意见,不管是有意的,还是无意的。提出来就有他的想法,有他的动机。要作到一日三醒我身。
十二,心态端正
总之要有一个好的心态,积极向上的心态,把事情往好里想,但同时要知道另一面的危机,遇到事情首先想到的应该是解决问题,而不是别的!
十三,合理的运用身边的人和事
主动,先下手为强,遇到不能够管理的,就可以和其他班干部一起对付,实在不行,就迅速找到老师陈述自己的观点,免得他倒打一耙(尽量少打小报告.)
十四,和老师同学搞好关系.
威信可以提高,你说的话老师也比较相信,可以简单一点的拿到老师的一些特殊授权,而这些授权往往对你的帮助很大.
十五,合理的运用自己的权利和魄力
对付难管理的,权利在他的眼中已经不存在的,就运用你的魄力,用心去交流,努力感动身边的人,感动得他们铭记于心,你就成功了.
一点要加油哦
规模以上工业企业是指全部国有企业(在工商局的登记注册类型为"110"的企业)和当年产品销售收入500万元以上(含)的非国有工业企业。
如果是下拉的,只有党员而没有预备党员一项,可填党员,但如果是填写的,你就老老实实填预备党员,填成党员对你没什么好处,填预备党员也不会有什么吃亏。
有可能搓纸轮需要清洗一下了,如果清洗了还是不行的话,那估计需要更换搓纸组件了
与执行利率相关(1)贷款利率与贷款用途、贷款性质、贷款期限、贷款政策、不同的贷款银行等相关。国家规定基准利率,各银行根据各种因素确定差别贷款利率,即在基准利率基础上上浮或下浮。现行基准利率是日调整并实施的,种类与年利率如下:①短期贷款六个月(含)5.6%;②六个月至一年(含)6%;③一至三年(含)6.15%;④三至五年(含)6.4%;⑤五年以上6.55%。(2)房贷:银行贷款利率是根据贷款的信用情况等综合评价的,根据信用情况、抵押物、国家政策(是否首套房)、银行信贷资金紧张度等来确定贷款利率水平,如果各方面评价良好,不同银行执行的房贷利率有所差别,国家规定首套房利率下限为85折,银行贷款利率是根据贷款的信用情况等综合评价的,根据信用情况、抵押物、国家政策(是否首套房)等来确定贷款利率水平,如果各方面评价良好,不同银行执行的房贷利率有所差别,有些打折比较多,部分银行利率最大优惠可达85折,有些打折少甚至不打折。一般上半年信贷资金相对足一些,折扣会高些,下半年和年初,由于资金紧张等原因,首套房贷款利率执行基准利率,有的1.1倍甚至更高。同一银行不同地方执行的利率也有所差别。。
那就需要走法律途径啊,不过为什么要不还呢,好借好还,再借不难啊。
只要是国家规定贷款利率的4倍以下都是合法的。
这就要看你的需求了,如果需求大的话,可以用自己的房产作为抵押,这种申请比较容易。 如果比较少的话,可以信用贷款,这种就比较快,程序比较简单。
按照息除本减还款方式(即先还利息再还本金)年下来要多还钱大概=本金*年利率/2利率5.4借1W年下来大概要多还270元。
每次买好莱坞48小时的都很满意,果汁很好喝,包装也好。实力推荐
“守望成长,健康生活”菲亚特,以改善全民用水品质,解决水质健康隐患为目标,为中国千百万个家庭带来全球领先的健康管道解决方案,真正意义上把高品质健康理念引入现代家居净水生活空间,尽享同步欧美的家装健康管道新体验。
价格还是比较亲民的,上次3个人也才花了不到200.
厨师是一个热门职业哦,建议你可以去上海新东方那边学,他们在培养厨师方面很专业的
有的,少儿模特培训可以调整歪脖、端肩、高低肩、颈前伸、含胸、驼背、骨盆倾斜、螺旋腿、O型腿、内外八、脚踝内陷等不良体态和改善注意力不集中,掌握舞台礼仪、培养高雅气质、提高表演能力、增强自信心、锻炼胆量、磨练意志和抗挫能力!采用科学的模特表演专业知识,培养孩子正确的坐姿、站姿、走姿,对儿童的气质培养起到积极的作用。咨询热线:152- 曾老师(V信同步)
正在加载...
Copyright &
Corporation, All Rights Reserved
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415如何关闭一个正在accept的ServerSocket_百度知道
如何关闭一个正在accept的ServerSocket
我有更好的答案
加入一个ServerSocket正在另一个线程堵塞accept,那如何停止accept或者关闭Socket?Server socket 设置下超时 setSoTimeout 然后在Listen线程中用interrupt其实直接close socket也可以,不过会抛出异常,我的意思是有什么比较安全而又简单的办法?难道要加一个标志,然后要关闭的时候把标志设为stop,然后连接listernSocket?这样也未免太麻烦了JDK5.0里面新增了java.util.concurrent包(对于多线程的开发建议尽量使用这个包),下面是javadoc里面的样例代码用法示例下面给出了一个网络服务的简单结构,这里线程池中的线程作为传入的请求。它使用了预先配置的 Executors.newFixedThreadPool(int) 工厂方法:java 代码 class NetworkService implements Runnable {
private final ServerSocket serverS
private final ExecutorS
public NetworkService(int port, int poolSize)
throws IOException {
serverSocket = new ServerSocket(port);
pool = Executors.newFixedThreadPool(poolSize);
public void run() { // run the service
for (;;) {
pool.execute(new Handler(serverSocket.accept()));
} catch (IOException ex) {
pool.shutdown();
class Handler implements Runnable {
private final S
Handler(Socket socket) { this.socket = }
public void run() {
// read and service request on socket
下列方法分两个阶段关闭 ExecutorService。第一阶段调用 shutdown 拒绝传入任务,然后调用 shutdownNow(如有必要)取消所有遗留的任务:java 代码 void shutdownAndAwaitTermination(ExecutorService pool) {
pool.shutdown(); // Disable new tasks from being submitted
// Wait a while for existing tasks to terminate
if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
pool.shutdownNow(); // Cancel currently executing tasks
// Wait a while for tasks to respond to being cancelled
if (!pool.awaitTermination(60, TimeUnit.SECONDS))
System.err.println(&Pool did not terminate&);
} catch (InterruptedException ie) {
// (Re-)Cancel if current thread also interrupted
pool.shutdownNow();
// Preserve interrupt status
Thread.currentThread().interrupt();
内存一致性效果:线程中向 ExecutorService 提交 Runnable 或 Callable 任务之前的操作 happen-before 由该任务所提取的所有操作,后者依次 happen-before 通过 Future.get() 获取的结果。
采纳率:90%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Java Socket 的参数选项解读_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Java Socket 的参数选项解读
来源:Linux社区&
作者:biakia
Java Socket中有很多参数可以选择,这篇文章的目的是沉淀出这些参数的语义和用法,供自己以后查阅。
1、java socket参数选项总览
在JDK1.6中有如下参数选项:
public final static int TCP_NODELAY = 0x0001;public final static int SO_BINDADDR = 0x000F;public final static int SO_REUSEADDR = 0x04;public final static int SO_BROADCAST = 0x0020;public final static int IP_MULTICAST_IF = 0x10;public final static int IP_MULTICAST_IF2 = 0x1f;public final static int IP_MULTICAST_LOOP = 0x12;public final static int IP_TOS = 0x3;public final static int SO_LINGER = 0x0080;public final static int SO_TIMEOUT = 0x1006;public final static int SO_SNDBUF = 0x1001;public final static int SO_RCVBUF = 0x1002;public final static int SO_KEEPALIVE = 0x0008;public final static int SO_OOBINLINE = 0x1003;
&2、public final static int TCP_NODELAY = 0x0001;要理解这个参数,首先要理解Nagle算法,下面先说说这个Nagle算法
2.1 Nagle算法产生的背景& & 当网络传输中存在大量小包传输时,会严重影响传输效率。比如一个包,包头40字节,而真正的内容只有一个字节或者几个字节(典型的有Telnet),这样的传输效率是十分低下的。Nagle算法要解决的就是这种低效率的传输问题。
2.2 Nagle算法的原理& & 用通俗的话来说就是,把小包要发送的字节先缓存,当到达一定的阀值的时候再一次性传输。具体算法(伪代码)如下:if there is new data to send& if the window size &= MSS and available data is &= MSS& & send complete MSS segment now& else& & if there is unconfirmed data still in the pipe& & & enqueue data in the buffer until an acknowledge is received& & else& & & send data immediately& & end if& end ifend if其中MSS为maximum segment size的缩写,是TCP头部的一个字段,表示一个TCP段最大的数据承载量。
2.3 Nagle算法的问题&
在传输大文件的时候,如果使用这个算法,那么会出现明显的延迟现象,因此,在这种情况下,最好是关闭这个算法。
知道了Nagle算法,就知道了TCP_NODELAY这个参数的意义了,如果这个参数被设置为True,那么就是关闭Nagle算法,实现无延迟传输,如果设置为false,则是打开这个算法,会对发送的数据进行缓存。
3、public final static int SO_BINDADDR = 0x000F;&
获取绑定套接字的本地地址(不能仅将此选项&设置&为&得到&,因为套接字是在创建时绑定的,所以本地绑定的地址不可更改)。
4、public final static int SO_REUSEADDR = 0x04;& &
这个参数表示套接字对端口是否可重用。&
这个套接字选项通知内核,如果端口忙,但TCP状态位于 TIME_WAIT ,可以重用端口。如果端口忙,而TCP状态位于其他状态,重用端口时依旧得到一个错误信息,指明"地址已经使用中"。如果你的服务程序停止后想立即重启,而新套接字依旧使用同一端口,此时 SO_REUSEADDR 选项非常有用。必须意识到,此时任何非期望数据到达,都可能导致服务程序反应混乱,不过这只是一种可能,事实上很不可能。
& & & 一个套接字由相关五元组构成,协议、本地地址、本地端口、远程地址、远程端口。SO_REUSEADDR 仅仅表示可以重用本地本地地址、本地端口,整个相关五元组还是唯一确定的。所以,重启后的服务程序有可能收到非期望数据。必须慎重使用 SO_REUSEADDR 选项。
5、public final static int SO_BROADCAST = 0x0020;
这个参数选项用来控制广播,目前只有在DatagramSocket里支持。
6、public final static int IP_MULTICAST_IF = 0x10;
用来控制多播的参数选项,目前只有在MulticastSocket里支持
在MulticastSocket的源代码里有设置多播的方法:
&public void setInterface(InetAddress inf) throws SocketException {& & if (isClosed()) {& & & & throw new SocketException("Socket is closed");& & }& & checkAddress(inf, "setInterface");& & synchronized (infLock) {& & & & getImpl().setOption(SocketOptions.IP_MULTICAST_IF, inf);& & & & infAddress =& & }& & }
7、public final static int IP_MULTICAST_IF2 = 0x1f;
& & & & 这个字段的效果和上面的是一样的,只是扩展支持IPV6
8、public final static int IP_MULTICAST_LOOP = 0x12;
& & & & 用来设置本地回环接口的多播特性,在MulticastSocket源代码中有相关方法:
* Disable/Enable local loopback of multicast datagrams& &
* The option is used by the platform's networking code as a hint & &
* for setting whether multicast data will be looped back to & &
* the local socket.& &
* &p&Because this option is a hint, applications that want to& &
* verify what loopback mode is set to should call & &
#getLoopbackMode()}& &
* @param disable &code&true&/code& to disable the LoopbackMode& &
* @throws SocketException if an error occurs while setting the value& &
* @since 1.4& &
* @see #getLoopbackMode& &
*/& & public void setLoopbackMode(boolean disable) throws SocketException {& & getImpl().setOption(SocketOptions.IP_MULTICAST_LOOP, Boolean.valueOf(disable));& & }
9、public final static int IP_TOS = 0x3;
& & & 这个参数是用来控制IP头中的TOS字段的,是用来控制和优化IP包的路径的,在Socket源代码里有一个设置的方法:
* Sets traffic class or type-of-service octet in the IP& &
* header for packets sent from this Socket.& &
* As the underlying network implementation may ignore this& &
* value applications should consider it a hint.& &
* &P& The tc &B&must&/B& be in the range &code& 0 &= tc &=& &
* 255&/code& or an IllegalArgumentException will be thrown.& &
* &p&Notes:& &
* &p& For Internet Protocol v4 the value consists of an octet& &
* with precedence and TOS fields as detailed in RFC 1349. The& &
* TOS field is bitset created by bitwise-or'ing values such& &
* the following :-& &
* &LI&&CODE&IPTOS_LOWCOST (0x02)&/CODE&&/LI&& &
* &LI&&CODE&IPTOS_RELIABILITY (0x04)&/CODE&&/LI&& &
* &LI&&CODE&IPTOS_THROUGHPUT (0x08)&/CODE&&/LI&& &
* &LI&&CODE&IPTOS_LOWDELAY (0x10)&/CODE&&/LI&& &
* &/UL&& &
* The last low order bit is always ignored as this& &
* corresponds to the MBZ (must be zero) bit.& &
* Setting bits in the precedence field may result in a& &
* SocketException indicating that the operation is not& &
* permitted.& &
* As RFC 1122 section 4.2.4.2 indicates, a compliant TCP& &
* implementation should, but is not required to, let application& &
* change the TOS field during the lifetime of a connection.& &
* So whether the type-of-service field can be changed after the& &
* TCP connection has been established depends on the implementation& &
* in the underlying platform. Applications should not assume that& &
* they can change the TOS field after the connection.& &
* For Internet Protocol v6 &code&tc&/code& is the value that& &
* would be placed into the sin6_flowinfo field of the IP header.& &
* @param tc& & & & an &code&int&/code& value for the bitset.& &
* @throws SocketException if there is an error setting the& &
* traffic class or type-of-service& &
* @since 1.4& &
* @see #getTrafficClass& &
*/& & public void setTrafficClass(int tc) throws SocketException {& & if (tc & 0 || tc & 255)& & & & throw new IllegalArgumentException("tc is not in range 0 -- 255");
& & if (isClosed())& & & & throw new SocketException("Socket is closed");& & & & getImpl().setOption(SocketOptions.IP_TOS, new Integer(tc));& & }
&从源代码的注释看,TOS设置了是否生效,和底层的操作系统的实现有关。应用程序无法保证TOS的变更会对socket连接产生影响。个人认为,TOS在一般情况下用不到。
10、public final static int SO_LINGER = 0x0080;
& & & 先看Socket源代码:
* Enable/disable SO_LINGER with the specified linger time in seconds. & &
* The maximum timeout value is platform specific.& &
* The setting only affects socket close.& &
* @param on& &
whether or not to linger on.& &
* @param linger how long to linger for, if on is true.& &
* @exception SocketException if there is an error& &
* in the underlying protocol, such as a TCP error. & &
* @exception IllegalArgumentException if the linger value is negative.& &
* @since JDK1.1& &
* @see #getSoLinger()& &
*/& & public void setSoLinger(boolean on, int linger) throws SocketException {& & if (isClosed())& & & & throw new SocketException("Socket is closed");& & if (!on) {& & & & getImpl().setOption(SocketOptions.SO_LINGER, new Boolean(on));& & } else {& & & & if (linger & 0) {& & & & throw new IllegalArgumentException("invalid value for SO_LINGER");& & & & }& & & & & & if (linger & 65535)& & & & & & & & linger = 65535;& & & & getImpl().setOption(SocketOptions.SO_LINGER, new Integer(linger));& & }& & }
& & & 这个字段对Socket的close方法产生影响,当这个字段设置为false时,close会立即执行并返回,如果这时仍然有未被送出的数据包,那么这些数据包将被丢弃。如果设置为True时,有一个延迟时间可以设置。这个延迟时间就是close真正执行所有等待的时间,最大为65535。&
11、public final static int SO_TIMEOUT = 0x1006;&
*& Enable/disable SO_TIMEOUT with the specified timeout, in& &
*& milliseconds.& With this option set to a non-zero timeout,& &
*& a read() call on the InputStream associated with this Socket& &
*& will block for only this amount of time.& If the timeout expires,& &
*& a &B&java.net.SocketTimeoutException&/B& is raised, though the& &
*& Socket is still valid. The option &B&must&/B& be enabled& &
*& prior to entering the blocking operation to have effect. The& &
*& timeout must be & 0.& &
*& A timeout of zero is interpreted as an infinite timeout.& &
* @param timeout the specified timeout, in milliseconds.& &
* @exception SocketException if there is an error& &
* in the underlying protocol, such as a TCP error. & &
JDK 1.1& &
* @see #getSoTimeout()& &
*/& & public synchronized void setSoTimeout(int timeout) throws SocketException {& & if (isClosed())& & & & throw new SocketException("Socket is closed");& & if (timeout & 0)& & & throw new IllegalArgumentException("timeout can't be negative");
& & getImpl().setOption(SocketOptions.SO_TIMEOUT, new Integer(timeout));& & }
& & & 这个参数用来控制客户端读取socket数据的超时时间,如果timeout设置为0,那么就一直阻塞,否则阻塞直到超时后直接抛超时异常。
12、public final static int SO_SNDBUF = 0x1001;
在默认情况下,输出流的发送缓冲区是8096个字节(8K)。这个值是Java所建议的输出缓冲区的大小。如果这个默认值不能满足要求,可以用setSendBufferSize方法来重新设置缓冲区的大小。
13、public final static int SO_RCVBUF = 0x1002;
在默认情况下,输入流的接收缓冲区是8096个字节(8K)。这个值是Java所建议的输入缓冲区的大小。如果这个默认值不能满足要求,可以用setReceiveBufferSize方法来重新设置缓冲区的大小。
14、public final static int SO_KEEPALIVE = 0x0008;
& & & 如果将这个参数这是为True,客户端每隔一段时间(一般不少于2小时)就像服务器发送一个试探性的数据包,服务器一般会有三种回应:
1、服务器正常回一个ACK,这表明远程服务器一切OK,那么客户端不会关闭连接,而是再下一个2小时后再发个试探包。
2、服务器返回一个RST,这表明远程服务器挂了,这时候客户端会关闭连接。
3、如果服务器未响应这个数据包,在大约11分钟后,客户端Socket再发送一个数据包,如果在12分钟内,服务器还没响应,那么客户端Socket将关闭。&
15、public final static int SO_OOBINLINE = 0x1003;
如果这个Socket选项打开,可以通过Socket类的sendUrgentData方法向服务器发送一个单字节的数据。这个单字节数据并不经过输出缓冲区,而是立即发出。虽然在客户端并不是使用OutputStream向服务器发送数据,但在服务端程序中这个单字节的数据是和其它的普通数据混在一起的。因此,在服务端程序中并不知道由客户端发过来的数据是由OutputStream还是由sendUrgentData发过来的。
本文永久更新链接地址:
相关资讯 & & &
& (11/12/:14)
& (12/25/:00)
& (01月03日)
& (06/20/:47)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款}

我要回帖

更多关于 java中socket 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信