handlersocketandroid 中socket出错

handlersocket  时间:2021-06-21  阅读:()

这是一个线程,在服务器上,从客户端发送消息到服务器,服务器这个程序处理

你没明白 Socket 是一个全双工通信,你一句它一句的模式只适合说完了就 close,不适合只 flush 不 close 的情况。

当下面情况出现时会死锁: server: read + write, client: write + read。

因为你没有使用多线程,当 read 没有内容时会阻塞,这就是死锁的关键点。

所以只有当对方 write 后 close 了,这边才能从 read 中出来进行 write 过程。

正确的做法是: 1.双线程,一个处理 receive,它读取到内容如果是一个完整的 标签就把它解码成一个 request 放入请求消息队列,系统从队列里面拿到请求处理它并把回复放入回复队列。

另一个线程处理 send,它从回复队列里面拿到回复消息,发送出去。

这两个线程都是会分别阻塞,所以这叫同步式。

2. Java NIO,异步式,当有 read 或 write 消息出现时你的线程处理这个事件读取数据处理,对于 read 事件,读取到后解码成 request 对象放入请求队列;如果是 write 事件发生,则从回复队列拿走消息发送出去。

因为 write 事件只要网络正常会连续不停地发生,所以你需要根据回复队列有无消息来判断,没有消息就 Thread.currentThread().yield() 跳过;一个线程可以同时用来处理 read 和 write 事件,但你不应该让这个处理 TCP 的线程来处理 request 本身,因为处理 request 本身是业务内容不是通信过程,处理业务的线程读取请求队列处理完把回复放入回复队列,它和通信过程那个线程是分开的,通过两个队列来交换数据。

这种方案通信过程本身不需要在没有 read 或 write 时阻塞,除非你自己决定当没有 write 消息时阻塞到有 reply 消息时继续。

你在 Sun /Oracle 站点上搜索 Java NIO 样例来实现这个。

android通过Handler使子线程更新UI

你这代码写的问题太多了,不过你的需求倒是很容易实现,把iew对象传到ServerThread线程中 在ServerThread 写如下代码: Handler handler = new Handler(Looper.getMainLooper()) { handleMessage(Message msg) { //在这个给iew设置text } } 在ServerThread中在你想给iew设置text的地方用上边的handler发送消息就可以了

关于java 使用 socket 抓取网页的问题。

最简单的网络爬虫 public void basicSpider(){ URL url=null; InputStream in=null; BufferReader br =null; String temp=null; StringBuilder sb=new StringBuilder(); try{ url=new URL(""); in=url.openStream(): br=new BufferReader(new InputStreamReader(in)); while((temp = br.readLine())!=null){ sb.append(temp); //这样就可以将网络内容下载到本地机器。

然后进行数据分析,建立索引。

这也是搜索引擎的第一步。

} System.out.println(sb); }catch(MalformedURLException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); }finally{ try{ br.close(); }catch(IOException e ){ e.printStackTrace(); } try{ in.close(); }catch(IOException e){ e.printStackTrace(); } } } 如果你要更多功能,那你还可以自己添加。

我写的是最简易的爬虫

android 中socket出错

你是在android4.0上运行的吧?抛NetworkOnMainThreadException异常了?因为socket这类网络连接有可能非常耗时,在主线程中执行就有可能阻塞主线程。



你可以把socket连接放到一个子线程中去执行,连接完成后再通知主线程。

HostYun 新增可选洛杉矶/日本机房 全场9折月付19.8元起

关于HostYun主机商在之前也有几次分享,这个前身是我们可能熟悉的小众的HostShare商家,主要就是提供廉价主机,那时候官方还声称选择这个品牌的机器不要用于正式生产项目,如今这个品牌重新转变成Hostyun。目前提供的VPS主机包括KVM和XEN架构,数据中心可选日本、韩国、香港和美国的多个地区机房,电信双程CN2 GIA线路,香港和日本机房,均为国内直连线路,访问质量不错。今天和大家分享下...

onevps:新增(支付宝+中文网站),香港/新加坡/日本等9机房,1Gbps带宽,不限流量,仅需$4/月

onevps最新消息,为了更好服务中国区用户:1、网站支付方式新增了支付宝,即将增加微信;原信用卡、PayPal方式不变;(2)可以切换简体中文版网站,在网站顶部右上角找到那个米字旗,下拉可以换中国简体版本。VPS可选机房有:中国(香港)、新加坡、日本(东京)、美国(纽约、洛杉矶)、英国(伦敦)、荷兰(阿姆斯特丹)、瑞士(苏黎世)、德国(法兰克福)、澳大利亚(悉尼)。不管你的客户在亚太区域、美洲区...

随风云25元/月 ,德阳高防云服务器 2核2G 10M 75元/月 内蒙古三线BGP服务器 2核2G 5M

公司介绍成都随风云科技有限公司成立于2021年,是国内领先的互联网业务平台服务提供商。公司专注为用户提供低价高性能云计算产品,致力于云计算应用的易用性开发,并引导云计算在国内普及。目前公司研发以及运营云服务基础设施服务平台(IaaS),面向全球客户提供基于云计算的IT解决方案与客户服务,拥有丰富的国内BGP、双线高防、香港等优质的IDC资源。公司一直秉承”以人为本、客户为尊、永续创新&...

handlersocket为你推荐
4k超高清视频下载哪里有4K片源下载啊?补充:刚入手了一个4k电视盒,小美盒子V9,说是支持4k。正好我的电视机是4k的,想知道哪里有得下载呢?有朋友说我傻,现在基本上没有4k片源下载,而且不知道什么时候才有。等到流行的时候也许这个机器又淘汰啦!我该怎么办啊?比思论坛永久域名不知道为什么 比思论坛的网站打不开 怎么办呐webservice框架什么是webservice,什么情况下使用,如何使用上行宽带上行宽带和下行宽带代表什么?腾讯合作伙伴大会如何成为腾讯渠道合作伙伴?特斯拉model3降价特斯拉官网为何会被挤崩?怎么查微信注册时间怎么查对方的微信号什么时候注册的cc防火墙web防火墙有什么作用情人节网页有没有网站情人节办活动的啊???mpeg4格式什么是MPEG4视频格式
sugarhosts awardspace 秒解服务器 ibrs ca4249 北京双线机房 1元域名 上海电信测速网站 日本代理ip supercache 测试网速命令 攻击服务器 hostease asp空间 腾讯服务器 架设代理服务器 美国vpn代理 香港云主机 什么是云主机 koss耳机 更多