use*_*103 2 java sockets android client-server
您好亲爱的程序员,我需要您的帮助.
我做了一个非常非常简单的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();
}
Run Code Online (Sandbox Code Playgroud)
}
客户端(在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();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 10
你不应该在"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");
}
}
Run Code Online (Sandbox Code Playgroud)
}
并在onCreate中添加此代码:
MySyncTask asyncTask=new MySyncTask (tv,pbar);
asyncTask.execute(1000);
Run Code Online (Sandbox Code Playgroud)
我的代码可能有一些错误,你应该检查;
你可以在谷歌搜索"AsyncTask",并为它提供了许多信息.它可能对你有用.
需要很多时间做的工作不能放在UI线程,桅杆放在后台.
我很抱歉我的英语不好
对不起,我再次修改了我的代码
归档时间: |
|
查看次数: |
13637 次 |
最近记录: |