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

RAKsmart:美国洛杉矶独服,E3处理器/16G/1TB,$76.77/月;美国/香港/日本/韩国站群服务器,自带5+253个IPv4

RAKsmart怎么样?RAKsmart机房即日起开始针对洛杉矶机房的独立服务器进行特别促销活动:低至$76.77/月,最低100Mbps带宽,最高10Gbps带宽,优化线路,不限制流量,具体包括有:常规服务器、站群服务器、10G大带宽服务器、整机机柜托管。活动截止6月30日结束。RAKsmart,美国华人老牌机房,专注于圣何塞服务器,有VPS、独立服务器等。支持PayPal、支付宝付款。点击直达...

企鹅小屋6折年付240元起,美国CN2 GIA VPS促销,独享CPU,三网回程CN2 GIA

企鹅小屋怎么样?企鹅小屋最近针对自己的美国cn2 gia套餐推出了2个优惠码:月付7折和年付6折,独享CPU,100%性能,三网回程CN2 GIA网络,100Mbps峰值带宽,用完优惠码1G内存套餐是年付240元,线路方面三网回程CN2 GIA。如果新购IP不能正常使用,请在开通时间60分钟内工单VPS技术部门更换正常IP;特价主机不支持退款。点击进入:企鹅小屋官网地址企鹅小屋优惠码:年付6折优惠...

VPSDime7美元/月,美国达拉斯Windows VPS,2核4G/50GB SSD/2TB流量/Hyper-V虚拟化

VPSDime是2013年成立的国外VPS主机商,以大内存闻名业界,主营基于OpenVZ和KVM虚拟化的Linux套餐,大内存、10Gbps大带宽、大硬盘,有美国西雅图、达拉斯、新泽西、英国、荷兰机房可选。在上个月搞了一款达拉斯Linux系统VPS促销,详情查看:VPSDime夏季促销:美国达拉斯VPS/2G内存/2核/20gSSD/1T流量/$20/年,此次推出一款Windows VPS,依然是...

handlersocket为你推荐
贸易配额出口配额是什么意思?中国学生网中国大学生在线邮箱怎么申请?素数算法有能写出所有素数的公式吗excel大写金额在Excel中如何输入数字直接显示大写金额?renderpartialrenderHtml和render有什么区别国家法规数据库在哪里可以找到比较全面的法律法规更新的信息?pat是什么格式怎么能把常用格式的图片转换成PAT格式的呀~云输入法QQ云输入法的候选窗口是什么样的?音乐代码在html中插入mp3音频的代码是什么全局钩子加载全局钩子是什么,每次进入股票软件都说加载全局钩子,是中病毒了吗
免费cn域名注册 域名备案号查询 cpanel主机 便宜建站 payoneer 外国空间 美国php主机 河南服务器 京东商城双十一活动 seednet 广州服务器 域名与空间 双线asp空间 smtp服务器地址 云服务器比较 测速电信 广东主机托管 如何登陆阿里云邮箱 服务器硬件配置 accountsuspended 更多