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();
希望这可以帮助。