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连接放到一个子线程中去执行,连接完成后再通知主线程。

bgpto:独立服务器夏季促销,日本机器6.5折、新加坡7.5折,20M带宽,低至$93/月

bgp.to对日本机房、新加坡机房的独立服务器在搞特价促销,日本独立服务器低至6.5折优惠,新加坡独立服务器低至7.5折优惠,所有优惠都是循环的,终身不涨价。服务器不限制流量,支持升级带宽,免费支持Linux和Windows server中文版(还包括Windows 10). 特色:自动部署,无需人工干预,用户可以在后台自己重装系统、重启、关机等操作!官方网站:https://www.bgp.to...

CloudCone月付$48,MC机房可小时付费

CloudCone商家在前面的文章中也有多次介绍,他们家的VPS主机还是蛮有特点的,和我们熟悉的DO、Linode、VuLTR商家很相似可以采用小时时间计费,如果我们不满意且不需要可以删除机器,这样就不扣费,如果希望用的时候再开通。唯独比较吐槽的就是他们家的产品太过于单一,一来是只有云服务器,而且是机房就唯一的MC机房。CloudCone 这次四周年促销活动期间,商家有新增独立服务器业务。同样的C...

易探云:香港CN2云服务器低至18元/月起,183.60元/年

易探云怎么样?易探云最早是主攻香港云服务器的品牌商家,由于之前香港云服务器性价比高、稳定性不错获得了不少用户的支持。易探云推出大量香港云服务器,采用BGP、CN2线路,机房有香港九龙、香港新界、香港沙田、香港葵湾等,香港1核1G低至18元/月,183.60元/年,老站长建站推荐香港2核4G5M+10G数据盘仅799元/年,性价比超强,关键是延迟全球为50ms左右,适合国内境外外贸行业网站等,如果需...

handlersocket为你推荐
旺旺群发软件旺旺群发器哪种好使用短信营销方案中秋节,国庆节短信营销方案上行宽带上行宽带和下行宽带什么意思5e5e5e如何更改bootstrap navbar的颜色 03 Topics 03 Ruby Chinaqq管家官网腾讯手机管家如何下载QQ手机管家?云办公平台Gleasy云办公平台解决了哪些问题?腾讯合作伙伴大会如何成为腾讯渠道合作伙伴?医院排队系统怎么将排队系统的信息显示在led上东兴证券网站东兴证券超强版下载泛微协同办公系统泛微OA系统怎么创建新人员
希网动态域名 服务器配置技术网 dns是什么 瓦工 赵容 主机 bandwagonhost 韩国俄罗斯 香港机房 java主机 美国主机网 godaddy支付宝 网通代理服务器 宁波服务器 秒杀预告 ftp免费空间 ca187 申请免费空间和域名 个人免费主页 cloudlink 更多