求大神!为什么我用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){} 展开
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){} 展开
7个回答
Storm代理
2023-06-05 广告
2023-06-05 广告
StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,IP...
点击进入详情页
本回答由Storm代理提供
展开全部
楼上基本解释过了,Java的主线程不是UI线程,Android的主线程是UI线程,你在UI线程去开网络连接,通常会ANR(应用无响应)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题是由于android版本更新后造成的,以前的版本可以直接在主线程里面建Socket。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主这个安卓程序的线程是写在在onCreate中吧,如果是这样的话是不行的要用Timer和TimerTask才可以,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
主线程吧,否则会报错的,耗时操作必须新线程
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询