安卓4.0.3 SOCKET编程的问题

问题描述

今天编一个安卓的小程序,就是和SOCKET通信,编出来以后我在2.3的模拟器上运行正常,可以通信,但是放到手机(4.0.3系统)上刚打开就强制跳出,我又试了一下4.0.3的模拟器,同样强制跳出,麻烦帮我看看我这个小程序,还有就是最好能说明一下4.0.3下编程的注意事项。客户端(安卓)程序packagecom.example.test;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.io.PrintWriter;importjava.net.Socket;importandroid.app.Activity;importandroid.app.AlertDialog;importandroid.content.DialogInterface;importandroid.os.Bundle;importandroid.os.Handler;importandroid.os.Message;importandroid.view.View;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.TextView;publicclassSocketDemoextendsActivityimplementsRunnable{privateTextViewtv_msg=null;privateEditTexted_msg=null;privateButtonbtn_send=null;//privateButtonbtn_login=null;privatestaticfinalStringHOST="192.168.49.1";privatestaticfinalintPORT=9999;privateSocketsocket=null;privateBufferedReaderin=null;privatePrintWriterout=null;privateStringcontent="";/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);tv_msg=(TextView)findViewById(R.id.TextView);ed_msg=(EditText)findViewById(R.id.EditText01);//btn_login=(Button)findViewById(R.id.Button01);btn_send=(Button)findViewById(R.id.Button02);try{socket=newSocket(HOST,PORT);in=newBufferedReader(newInputStreamReader(socket.getInputStream()));out=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);}catch(IOExceptionex){ex.printStackTrace();ShowDialog("loginexception"+ex.getMessage());}btn_send.setOnClickListener(newButton.OnClickListener(){publicvoidonClick(Viewv){//TODOAuto-generatedmethodstubStringmsg=ed_msg.getText().toString();if(socket.isConnected()){if(!socket.isOutputShutdown()){out.println(msg);}}}});newThread(SocketDemo.this).start();}publicvoidShowDialog(Stringmsg){newAlertDialog.Builder(this).setTitle("notification").setMessage(msg).setPositiveButton("ok",newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhich){//TODOAuto-generatedmethodstub}}).show();}publicvoidrun(){try{while(true){if(socket.isConnected()){if(!socket.isInputShutdown()){if((content=in.readLine())!=null){content+="n";mHandler.sendMessage(mHandler.obtainMessage());}else{}}}}}catch(Exceptione){e.printStackTrace();}}publicHandlermHandler=newHandler(){publicvoidhandleMessage(Messagemsg){super.handleMessage(msg);tv_msg.setText(tv_msg.getText().toString()+content);}};}

manifest:<manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.example.test"android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="15"android:targetSdkVersion="15"/><uses-permissionandroid:name="android.permission.INTERNET"></uses-permission><applicationandroid:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme"><activityandroid:name=".SocketDemo"android:label="@string/title_activity_main"><intent-filter><actionandroid:name="android.intent.action.MAIN"/><categoryandroid:name="android.intent.category.LAUNCHER"/></intent-filter></activity></application></manifest>

解决方案

解决方案二:
这没有错误信息怎么搞
解决方案三:
我也是同样遇到了这个问题,求大神求解
解决方案四:
到AndroidManifest.Xml改<uses-sdkandroid:minSdkVersion="7"/>
解决方案五:
3.0以上Socket的使用必须放在线程中完成
解决方案六:
在安卓4.0以上版本中,socket不能再主进程上创建,必须开线程。不过我也是刚知道,正在解决中~~
解决方案七:
这儿也能问安卓的了
解决方案八:
三楼的办法可行,在OnCreate()中加入以下代码,防止中断抛出StrictMode.setThreadPolicy(newStrictMode.ThreadPolicy.Builder().detectDiskWrites().detectDiskReads().detectNetwork().penaltyLog().build());StrictMode.setVmPolicy(newStrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());
解决方案九:
顶7楼!比用线程做来的方便
解决方案十:
android4.0以后就不能在主线程中初始化sockettry{socket=newSocket(HOST,PORT);in=newBufferedReader(newInputStreamReader(socket.getInputStream()));out=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);}catch(IOExceptionex){ex.printStackTrace();ShowDialog("loginexception"+ex.getMessage());}把这行代码放在run里面!!

时间: 2024-08-22 14:28:03

安卓4.0.3 SOCKET编程的问题的相关文章

网络编程-android 安卓 4.0 给一个客户端和服务器的demo。

问题描述 android 安卓 4.0 给一个客户端和服务器的demo. android 4.0以后到底是怎么联网的?求大神给一个demo.一个客户端和一个服务器的.服务器端servlet的写的吧.越详细越好.谢谢了.对那个异步消息不是很懂,还有就是子线程一块给详细点.谢谢了 解决方案 楼主,你这个问题有点大...我提供一些思路 客户端就不用说了.服务器端,按照现在的流行趋势,建议用Nodejs + MongoDB.Nodejs就类似tomcat,是给服务器端部署监听,监听客户端的请求.Mong

php使用socket编程的示例

 这篇文章主要介绍了php使用socket编程的示例,大家参考使用吧 2个php测试文件 server.php     代码如下: <?php //phpinfo(); //确保在连接客户端时不会超时 set_time_limit(0);   $ip = '127.0.0.1'; $port = 1935;   /*  +-------------------------------  *    @socket通信整个过程  +-------------------------------  *

续实例解析SOCKET编程模型之异步通信篇(上)

编程|异步 .NET 框架的 Socket 类实际上是 Winsock32 API 提供的套接字服务的托管代码版本.其中Socket 类为网络通信提供了一套丰富的方法和属性,大多数情况下,Socket 类方法只是将数据封送到它们的本机Win32 副本中并处理任何必要的安全检查.Socket 类允许使用 ProtocolType 枚举中所列出的任何一种协议执行异步和同步数据传输.Socket 类遵循异步方法的 .NET Framework 命名模式:例如,同步 Receive 方法对应于异步 Be

Python socket编程实例详解

  本文实例形式较为详细的讲述了Python socket编程.分享给大家供大家参考.具体如下: 复制代码 代码如下: sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 上面的代码创建了一个socket对象.type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字).AF_INET表示创建的是ip v4的类型. 复制代码 代码如下: socket(address_family,type,pro

Linux下socket编程,附带tcp例子

1.网络中进程之间如何通信? 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用(Solaris门和Sun RPC) 但这些都不是本文的主题!我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的.其实TCP/IP协议族已经帮我们解决了这个问

PHP Socket 编程过程详解

介绍 Socket用于进程间通信.进程间通信通常基于客户端-服务端模型.此时,客户端-服务端是可以彼此交互的应用程序.客户端和服务端之间的交互需要连接.Socket编程负责的就是为应用程序之间建立可进行交互的连接. 在本文中,我们将学习如何用PHP创建一个简单的客户端-服务端.我们还将学习如何客户端应用程序如何发送消息到服务端,以及如何从服务端接受消息. 使用代码 目的:开发一个客户端用于发送string消息到服务端,服务端将相同的信息反转后返回给客户端. PHP服务器 第1步:设置变量,如"主

PHp + socket编程练习——博客园回复

因为也是学习的路上,先画出思路,代码和看别人的学习的,最后是根据的思路完成的,可能比较简单,后期在去完善和更改     <?php /**  * php+socket 编程 发送HTTP请求  * @version  c.php  * 模拟博客园评论  */ interface Proto{     // 连接url     public function conn($url);     // 发送get请求     public function get();     // 发送post请求

PHP Socket 编程

 socket  Socket协议的形象描述       1.一个是发动机(Socket),提供了网络通信的能力               一个是轿车(Http),提供了具体的方式   2.socket的英文原义是"孔"或"插座".在这里作为4BDS UNIX的进程通信机制,取后一种意义.socket非常类似于电话插座.以一个国家级电话网为例.电话的通话双方相当于相互通信的2个进程,区号是它的网络地址:区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号

C#下的Raw Socket编程实现网络封包监视

编程|网络 谈起socket编程,大家也许会想起QQ和IE,没错.还有许多网络工具如P2P.NetMeeting等在应用层实现的应用程序,也是用socket来实现的.Socket是一个网络编程接口,实现于网络应用层,Windows Socket包括了一套系统组件,充分利用了Microsoft Windows 消息驱动的特点.Socket规范1.1版是在1993年1月发行的,并广泛用于此后出现的Windows9x操作系统中.Socket规范2.2版(其在Windows平台上的版本是Winsock2