Android Socket(客户端 – 服务器)

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

我做了一个非常非常简单的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(); } } 

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

 Stirng advice = ""; class MySyncTask extends AsyncTask{ @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); 

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

您可以在谷歌搜索“AsyncTask”,并获得许多信息。它可能对您有用。

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

我很抱歉我的英语不好

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

您需要在写入数据后进行flush以确保数据已发送。 您可以在Android或Java上制作服务器,两者都可以正常工作。试试这个:

 writer.println(advice); writer.flush(); 

并且不要忘记您发送的每个数据的EOF,因此整个事情将是:

 writer.println(advice + System.getProperty("line.separator")); writer.flush(); 

希望这可以帮助。