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

tmhhost(100元/季)自带windows系统,香港(三网)cn2 gia、日本cn2、韩国cn2、美国(三网)cn2 gia、美国cn2gia200G高防

tmhhost可谓是相当熟悉国内网络情况(资质方面:ISP\ICP\工商齐备),专业售卖海外高端优质线路的云服务器和独立服务器,包括了:香港的三网cn2 gia、日本 cn2、日本软银云服务器、韩国CN2、美国三网cn2 gia 云服务器、美国 cn2 gia +200G高防的。另外还有国内云服务器:镇江BGP 大连BGP数据盘和系统盘分开,自带windows系统,支持支付宝付款和微信,简直就是专...

Vinahost - 越南VPS主机商月6美元 季付以上赠送时长最多半年

Vinahost,这个主机商还是第一次介绍到,翻看商家的介绍信息,是一家成立于2008年的老牌越南主机商,业务涵盖网站设计、域名、SSL证书、电子邮箱、虚拟主机、越南VPS、云计算、越南服务器出租以及设备托管等,机房主要在越南胡志明市的Viettle和VNPT数据中心,其中VNPT数据中心对于国内是三网直连,速度优。类似很多海外主机商一样,希望拓展自己的业务,必须要降价优惠或者增加机房迎合需求用户...

御云(RoyalYun):香港CN2 GIA VPS仅7.9元每月起,美国vps仅8.9/月,续费同价,可叠加优惠

御云怎么样?炎炎暑期即将来临,御云(royalyun)香港、美国服务器开启大特惠模式。御云是新成立的云服务提供商,主要提供香港、美国的云服务器,不久将开启虚拟主机业务。我们的香港和美国主机采用CN2 GIA线路。目前,香港cn2 gia vps仅7.9元每月起,美国vps仅8.9/月,续费同价,可叠加优惠,香港云服务器国内延迟一般在50ms左右,是搭建网站的最佳选择,但是请不要用于违法用途。点击进...

handlersocket为你推荐
pat是什么格式怎么能把常用格式的图片转换成PAT格式的呀~音乐代码在html中插入mp3音频的代码是什么sms是什么短信确认码是什么腾讯合作伙伴大会腾讯位置服务是什么?医院排队系统医院排队机和医院排队机的区别有哪些?za是哪个国家的ci是在哪个国家产生的?哪个国家开始流行的泛微协同办公系统泛微OA系统怎么创建新人员泛微协同办公系统泛微oa怎么样?我想了解一下,有用过的同仁帮忙!发表下自己的观点(天津)aviconverter介绍一个好用的免费的avi转换器distinct是什么意思SQL数据库DISTINCT是什么意思
政务和公益机构域名注册管理中心 vps是什么 腾讯云数据库 圣诞节促销 促正网秒杀 天互数据 hktv 国外视频网站有哪些 上海电信测速 畅行云 测速电信 阿里dns 广东服务器托管 香港ip ncp 美国代理服务器 weblogic部署 nic asp简介 瓦工工资 更多