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

ZJI:520元/月香港服务器-2*E5-2630L/32GB/480G SSD/30M带宽/2IP

ZJI发布了一款7月份特别促销独立服务器:香港邦联四型,提供65折优惠码,限量30台(每用户限购1台),优惠后每月520元起。ZJI是原来Wordpress圈知名主机商家:维翔主机,成立于2011年,2018年9月启用新域名ZJI,提供中国香港、台湾、日本、美国独立服务器(自营/数据中心直营)租用及VDS、虚拟主机空间、域名注册等业务。下面列出这款服务器的配置信息。香港邦联四型CPU:2*E5-2...

UCloud:全球大促降价,云服务器全网最低价,1核1G快杰云服务器47元/年

ucloud:全球大促活动降价了!这次云服务器全网最低价,也算是让利用户了,UCloud商家调低了之前的促销活动价格,并且新增了1核1G内存配置快杰型云服务器,价格是47元/年(也可选2元首月),这是全网同配置最便宜的云服务器了!UCloud全球大促活动促销机型有快杰型云服务器和通用型云服务器,促销机房国内海外都有,覆盖全球20个城市,具体有北京、上海、广州、香港、 台北、日本东京、越南胡志明市、...

小欢互联19元/月起, 即日起至10月底 美国CERA 促销活动 美国/香港八折

小欢互联成立于2019年10月,主打海外高性价比云服务器、CDN和虚拟主机服务。近期上线了自营美国CERA机房高速VPS,进行促销活动,为客户奉上美国/香港八折优惠码:Xxc1mtLB优惠码适用于美国CERA一区/二区以及香港一区/二区优惠时间:即日起至10月底优惠码可无限次使用,且续费同价!官网:https://idc.xh-ws.com购买地址:美国CERA一区:https://idc.xh-...

handlersocket为你推荐
短信营销方案短信平台应该如何推广和运营啊?怎么用电脑发短信谁知道怎样能用电脑给手机发短信无处不在的意思人山无处不花枝的意思是什么举报非法网站如何举报非法网站?shoujiao手机板aoblox怎么从英文变成中文wow服务器状态我电脑上的魔兽服务器状态很好.但是还是玩不起来.请问可以玩了不?方正证券官方网方正证券完美版下载医院排队系统医院排队叫号系统有哪些功能?医院排队系统请问医院采血排队的设备系统是独立的吗?怎么查微信注册时间怎么知道微信上次登录时间
中国万网虚拟主机 google镜像 韩国俄罗斯 permitrootlogin 万网优惠券 免空 可外链相册 gtt 如何注册阿里云邮箱 linux使用教程 江苏双线服务器 优酷黄金会员账号共享 根服务器 申请网站 德讯 中国联通宽带测速 97rb 杭州电信宽带 重庆联通服务器托管 碳云 更多