求大神!为什么我用socket连接服务器在java 程序里可以连通但在android程序里却必须新建线程才能连接?

下面这是javaapplication的代码同样的类放在android程序里只有在新建的进程里才能运行,这个代码在最后。importjava.io.*;importjav... 下面这是java application的代码 同样的类放在android程序里只有在新建的进程里才能运行,这个代码在最后。
import java.io.*;
import java.net.*;
public class Client { static Socket client;
public Client(String site, int port){
try{
client = new Socket(site,port);
System.out.println("Client is created! site:"+site+" port:"+port);
}catch (UnknownHostException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
}

public String sendMsg(String msg){
try{
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream());
out.println(msg);
out.flush();
return in.readLine();
}catch(IOException e){
e.printStackTrace();
}
return "";
}

public void closeSocket(){
try{
client.close();
}catch(IOException e){
e.printStackTrace();
}
}

public static void main(String[] args)
{
Client client = new Client("192.168.137.1",12345);
System.out.println(client.sendMsg("Tester~"));
client.closeSocket();
}
}

//////////////////安卓程序内新建线程//////////////////////////////////////
new Thread(new Runnable(){
public void run(){
try{
SocketTest Tclient = new SocketTest("192.168.137.1",12345);
System.out.println(Tclient.sendMsg("Tester~"));
Tclient.closeSocket();
}catch(Exception e){}
展开
 我来答
邓浩铭
2012-11-05
知道答主
回答量:12
采纳率:0%
帮助的人:4.5万
展开全部
Android 的网络操作不能再UI线程里面进行,也就是不能在Android程序的主线程运行,因为网络操作比较耗时,用户体验不好,所以只能异步操作,在主线程中叫同步操作
Storm代理
2023-06-05 广告
StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,IP... 点击进入详情页
本回答由Storm代理提供
netaliang
2012-11-15 · TA获得超过141个赞
知道小有建树答主
回答量:125
采纳率:0%
帮助的人:162万
展开全部
楼上基本解释过了,Java的主线程不是UI线程,Android的主线程是UI线程,你在UI线程去开网络连接,通常会ANR(应用无响应)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
l278401555
2012-11-05
知道答主
回答量:24
采纳率:0%
帮助的人:11.2万
展开全部
这个问题是由于android版本更新后造成的,以前的版本可以直接在主线程里面建Socket。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
149420833
2012-11-08 · 超过16用户采纳过TA的回答
知道答主
回答量:34
采纳率:0%
帮助的人:38.6万
展开全部
楼主这个安卓程序的线程是写在在onCreate中吧,如果是这样的话是不行的要用Timer和TimerTask才可以,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pudgelawson
2012-11-06 · TA获得超过137个赞
知道小有建树答主
回答量:117
采纳率:0%
帮助的人:91.3万
展开全部
主线程吧,否则会报错的,耗时操作必须新线程
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式