Android Socket(客户端 - 服务器)

 mobiledu2402851323 发布于 2023-02-13 18:48

您好亲爱的程序员,我需要您的帮助.

我做了一个非常非常简单的Java套接字(客户端 - 服务器)项目,效果很好.但是当我使用那个客户端代码来制作它的android时,它不起作用,但我只为android制作客户端代码,服务器代码再次使用Java(也许我应该在android中制作服务器代码?)

服务器(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();
}

}

客户端(在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();
        }



}

小智.. 10

你不应该在"onCreat()"中连接网络,并且可以使用"AsyncTask"

String advice = ""; 

class MySyncTask extends AsyncTask{
@Override
protected String doInBackground(Integer... params) {
       try{
           Socket s = new Socket("127.0.0.1", 4242);
           InputStreamReader streamReader = new InputStreamReader(s.getInputStream()); 
           BufferedReader reader = new BufferedReader(streamReader);
           advice = reader.readLine();
           reader.close();
        }catch(Exception ex)
            ex.printStackTrace();
        }
        return advice;
    }

    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);

我的代码可能有一些错误,你应该检查;

你可以在谷歌搜索"AsyncTask",并为它提供了许多信息.它可能对你有用.

需要很多时间做的工作不能放在UI线程,桅杆放在后台.

我很抱歉我的英语不好

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

1 个回答
  • 你不应该在"onCreat()"中连接网络,并且可以使用"AsyncTask"

    String advice = ""; 
    
    class MySyncTask extends AsyncTask<Integer, Integer, String>{
    @Override
    protected String doInBackground(Integer... params) {
           try{
               Socket s = new Socket("127.0.0.1", 4242);
               InputStreamReader streamReader = new InputStreamReader(s.getInputStream()); 
               BufferedReader reader = new BufferedReader(streamReader);
               advice = reader.readLine();
               reader.close();
            }catch(Exception ex)
                ex.printStackTrace();
            }
            return advice;
        }
    
        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);
    

    我的代码可能有一些错误,你应该检查;

    你可以在谷歌搜索"AsyncTask",并为它提供了许多信息.它可能对你有用.

    需要很多时间做的工作不能放在UI线程,桅杆放在后台.

    我很抱歉我的英语不好

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

    2023-02-13 18:50 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有