Socket学习文档   http://developer.51cto.com/developer/javabook/images/3.pdf

1.socket.shutdownOutput();

文档解释:

Disables the output stream for this socket. For a TCP socket, any previously written data will be sent followed by TCP's normal connection termination sequence. If you write to a socket output stream after invoking shutdownOutput() on the socket, the stream will throw an IOException.if an I/O error occurs when shutting down this

具体可以参考这个帖子  http://www.blogjava.net/xuechen0721/archive/2006/04/29/44040.html

大致就是说,.shutdownOutput()这个方法是关闭输出流,而不是关闭Socket对象本身,把这个方法放到一个流的末尾,表示我已经给你(客户端或服务端)传完信息了,你不需要在等待接收信息了

.shutdownInput()这个方法类似。

不用socket.shutdownOutput()来做每段消息的结束标志时,还可以用下边的方法

//pw.write("这是"+info+"包装后的返回结果\r\n");   //注意\r\n是作为结束标志的
pw.println("这是"+info+"包装后的返回结果");    //prinltn和prinlt,write比较,prinltn自带换行,也可以当做结束标志。

socket.shutdownOutput()虽然没有关闭该Socket对象但是不能后续用该Socket对象传输发送数据了,必须关闭后重新new一个新的Socket。

2.Socket关闭问题

之前写了个Socket做监听代理,用Executor起了线程池接收Socket请求,当时服务端的用 socket = serverSocket.accept() 得到的socket在用完后没有关闭,只在客户端使用Socket时关闭了,程序部署上去一段时间,发现服务器上这个端口状态都是CLOSE_WAIT,

一直占满线程保持CLOSE_WAIT状态导致后续Socket客户端没法再“被接收”。后来在服务端加了一行代码,使用结束后服务端也关闭Socket对象。之后再测试,就是TIME_WAIT状态了,过段时间自己就关闭了。

PS:以前一直以为客户端和服务端Socket用的是一条通信“线”路,就像打电话一样,A(客户端)和B(服务端)通话,A主动挂断了,B肯定也“被动”挂断了,其实不是这样的;真实情况是A主动挂断了,B肯定也会保持打电话的姿态。

3. ServerSocket.setReuseAddress(true) 启动端口重用,这行代码一定要放到绑定端口前。

serverSocket =new ServerSocket();
serverSocket.setReuseAddress(true);//这个设置要放在绑定端口前
serverSocket.bind(new InetSocketAddress(serverPort));
pool = Executors.newFixedThreadPool(poolNum);logger.info("启动监听端口:"+serverPort);
while(true){socket = serverSocket.accept();pool.execute(new HandleSocketSer(socket));
}

4.多线程Socket方案

Threadpool   ---java自带

Executor  ---java自带

ForkJoin  ---java8自带

Actor模型   ---scala库自带

转载于:https://www.cnblogs.com/yanghaolie/p/7274215.html

关于Socket踩过的一些坑相关推荐

  1. python iocp_记对协程增加IOCP支持时候踩过的一些坑

    之前在对tbox的协程库中增加了基于IOCP的io处理,期间踩了不少的坑,这边就做个简单记录吧,省的到时候忘记了,自己看不懂自己这个代码 (= =) 坑点一 WSARecv/WSASend在lpNum ...

  2. 那些年我们踩过的Hive坑

    原文地址:https://blog.csdn.net/sunnyyoona/article/details/51648871 1. 缺少MySQL驱动包 1.1 问题描述 Caused by: org ...

  3. [Hive]那些年我们踩过的Hive坑

    1. 缺少MySQL驱动包 1.1 问题描述 Caused by: org.datanucleus.store.rdbms.connectionpool.DatastoreDriverNotFound ...

  4. 安装python爬虫scrapy踩过的那些坑和编程外的思考

    '转载地址:http://www.cnblogs.com/rwxwsblog/p/4557123.html' 这些天应朋友的要求抓取某个论坛帖子的信息,网上搜索了一下开源的爬虫资料,看了许多对于开源爬 ...

  5. Vue2.0配置mint-ui踩过的那些坑

    Vue2.0配置mint-ui踩过的那些坑 最近开发项目的时候逐渐采用vue.js+mint-ui的技术栈,但是昨天开始配置开发环境的时候,遇到了各种报错,即使是按照两家的官方文档配置,也还是会报错, ...

  6. 与webview打交道中踩过的那些坑

    随着HTML5被越来越多的用到web APP的开发当中,webview这一个神器便日渐凸显出重要地位.简要的说,webview能够在移动应用中开辟出一个窗口,在里面显示html页面,css以及js代码 ...

  7. charles都踩过哪些坑_开水果店的你,踩过了哪些坑?

    我们认为,开水果店遇到的大小问题,很多时候是有共性的.不论是开店新手还是老手,看看这里的案例,是否可以避免走一些弯路呢? 案例1 刘大飞第1次创业开水果踩过的那些坑.创业开水果店之前,刘大飞和合伙人一 ...

  8. 美团在Redis上踩过的一些坑-5.redis cluster遇到的一些问题

    转载请注明出处哈:http://carlosfu.iteye.com/blog/2254154 由于演讲时间有限,有关Redis-Cluster,演讲者没做太多介绍,简单的介绍了一些Redis-Clu ...

  9. Spring Cloud 升级最新 Finchley 版本,踩了所有的坑

    转载自   Spring Cloud 升级最新 Finchley 版本,踩了所有的坑 Spring Boot 2.x 已经发布了很久,现在 Spring Cloud 也发布了 基于 Spring Bo ...

  10. (转)Redis上踩过的一些坑-美团

    上上周和同事(龙哥)参加了360组织的互联网技术训练营第三期,美团网的DBA负责人侯军伟给大家介绍了美团网在redis上踩得一些坑,讲的都是干货和坑. 分为5个部分: 一.周期性出现connect t ...

最新文章

  1. 简单探讨TypeScript 枚举类型
  2. 学界 | 量化深度强化学习算法的泛化能力
  3. PMSM的FOC 矢量控制算法调试流程,新手上手流程
  4. gpio 树莓派3a+_树莓派4正式发布!硬件性能大提升:CPU提升3倍,支持USB3.0、蓝牙5.0、千兆以太网、4G LPDDR4、H.265...
  5. C++:函数参数不确定时用cstdarg(stdarg.h)
  6. Python笔记-windows平台中Flask打包成exe
  7. python飞机大战跟随鼠标移动_用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动...
  8. 知乎热议!学完 Python 之后,我的编程能力竟然退化了!
  9. 全员编程的时代下,软件测试如何转渗透测试?
  10. 数据库和数据库管理系统的区别
  11. 身份证号实名认证标准版API开发文档
  12. 您选择的不是数据库安装目录_您不是您的数据,但您的数据仍然是您
  13. 99道python测试题
  14. 【LOJ574】「LibreOJ NOI Round #2」黄金矿工
  15. HTML5期末大作业:电影在线网站设计——漫威电影(2页) 免费大学生网页设计制作作业作品下载dreamweaver制作静态html网页设计作业作
  16. Windows 自启动文件夹
  17. Spring Integration基本用法
  18. 各大门户调查:鄙视新浪,将博士伦的广告挂在热点新闻中间好几天了,把大众当傻瓜...
  19. 2021年起重机司机(限桥式起重机)考试题库及起重机司机(限桥式起重机)模拟考试题
  20. x38和x48是服务器芯片吗,主板芯片组 p35 p43 和 p45 有什么不同??????

热门文章

  1. 记一次坑爹的广工校赛
  2. 王者-寻找庄家蛛丝马迹
  3. GoldenGate碎碎念
  4. Windows Azure 云服务角色架构
  5. 在OpenStack虚拟机实例中创建swap分区的一种方法
  6. 手机网站与普通网站的不同
  7. photoshop 2021在m1 mac上导出png发生未知错误的解决方案
  8. iOS底层探索之多线程(十三)—锁的种类你知多少?
  9. 大快DKH大数据网络爬虫安装教程(详细图文步骤)
  10. 【Alpha】Daily Scrum Meeting——Day2