Android Socket(客户端 - 服务器) [英] Android Socket (Client - Server)

查看:127
本文介绍了Android Socket(客户端 - 服务器)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

亲爱的程序员我需要你的帮助。



我做了一个非常非常简单的java套接字(客户端 - 服务器)项目,效果很好。
但是当我使用客户端代码使它为Android,它是不工作,但我只做客户端代码为Android,服务器代码是在Java再次(可能是我应该使服务器代码在android



pre> public class DailyAdviceServer {
public void go(){
try {
ServerSocket serverSock = new ServerSocket(16242,50)
while(true)
{
Socket sock = serverSock.accept();

PrintWriter writer = new PrintWriter(sock.getOutputStream());
String advice = getAdvice();
writer.println(advice);
writer.close();
System.out.println(smth);
}
} catch(IOException ex)
{
ex.printStackTrace();
}
}



public static void main(String [] args)
{
DailyAdviceServer server = new DailyAdviceServer ();
server.go();
}

}



客户端(在Android中)

  public class MainActivity extends Activity {


protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
TextView tv =(TextView)findViewById(R.id.tv);
Socket s = new Socket(127.0.0.1,4242);
InputStreamReader streamReader = new InputStreamReader(s.getInputStream());
BufferedReader reader = new BufferedReader(streamReader);

String advice = reader.readLine();

tv.setText(Today you should:+ advice);
reader.close();
}
catch(IOException ex)
{
ex.printStackTrace();
}



}


解决方案

您不应在onCreat()中连接网络,并可以使用AsyncTask

  Stirng advice =; 

class MySyncTask extends AsyncTask< Integer,Integer,String> {
@Override
protected String doInBackground(Integer ... params){
Socket s = new Socket (127.0.0.1,4242);
InputStreamReader streamReader = new InputStreamReader(s.getInputStream());
BufferedReader reader = new BufferedReader(streamReader);

String advice = reader.readLine();
reader.close

}

protected void onPostExecute(String result){
tv.setText(Today you should:+ advice)
}
protected void onPreExecute(){
log.i(start);
}

}



并在你的onCreate中添加这个代码:

  MySyncTask asyncTask = new MySyncTask(tv,pbar); 
asyncTask.execute(1000);

我的代码可能有一些错误,请检查;



您可以在google中搜索AsyncTask,并且有很多信息可供您使用。



工作需要很多时间



很抱歉我的英文不好。



对不起,我再次修改了我的验证码


Hello dear programmers I need to your help.

I made a very very very simple java socket (client - server) project, what worked well. But when I used that client code to make it for android, it is not working, but I am making only client code for android, the server code is in Java again(may be I should make the server code in android too?)

Server(in Java)

public class DailyAdviceServer{  
  public void go() {
    try {
        ServerSocket serverSock = new ServerSocket(16242, 50);
        while (true)
        {
            Socket sock = serverSock.accept();

            PrintWriter writer = new PrintWriter(sock.getOutputStream());
            String advice = getAdvice();
            writer.println(advice);
            writer.close();
            System.out.println("smth");
        }
    } catch (IOException ex)
    {
        ex.printStackTrace();
    }
}



public static void main(String[] args)
{
    DailyAdviceServer server = new DailyAdviceServer();
    server.go();
}

}

Client(in Android)

public class MainActivity extends Activity  {


protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            TextView tv = (TextView) findViewById(R.id.tv);     
            Socket s = new Socket("127.0.0.1", 4242);
            InputStreamReader streamReader = new InputStreamReader(s.getInputStream()); 
            BufferedReader reader = new BufferedReader(streamReader);

            String advice = reader.readLine();

            tv.setText("Today you should: " + advice);
            reader.close();
        }
        catch (IOException ex)
        {
            ex.printStackTrace();
        }



}

解决方案

You should not connect network in "onCreat()", and can use "AsyncTask"

Stirng advice = ""; 

class MySyncTask extends AsyncTask<Integer, Integer, String>{
@Override
protected String doInBackground(Integer... params) {
       Socket s = new Socket("127.0.0.1", 4242);
        InputStreamReader streamReader = new InputStreamReader(s.getInputStream()); 
        BufferedReader reader = new BufferedReader(streamReader);

        String advice = reader.readLine();
        reader.close

    }

protected void onPostExecute(String result) {
     tv.setText("Today you should: " + advice);
}
protected void onPreExecute() {
   log.i("start");
}    

}

and add this code in you onCreate:

                        MySyncTask asyncTask=new MySyncTask (tv,pbar);
                    asyncTask.execute(1000);

My codes may be have some error,you should checked;

You can search "AsyncTask" in google, and have many information for it.it may be useful for you.

The works what need many time to do can not put in UI thread , mast put in background.

I am sorry for my bad english

I am sorry I have modfied my codes again

这篇关于Android Socket(客户端 - 服务器)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆