[英]Android Socket Error or crash
我正在使用以下代码将数据发送到TCP服务器,但出现错误。 任何想法? 我需要使用线程吗? 我可以直接在函数上运行它吗?
Msg&IPo&Proto是布局中的“编辑框”。 我认为我的问题是使用套接字!
Socket Clientsocketo;
String MsgOut="Nothing Happend";
TextView ad;
public void SendData(View v) throws IOException {
EditText aa = (EditText)findViewById(R.id.EditText01);
String Msg = aa.getText().toString();
EditText ab = (EditText)findViewById(R.id.editText);
String IPo = ab.getText().toString();
EditText ac = (EditText)findViewById(R.id.editText2);
int Porto = Integer.parseInt(ac.getText().toString());
InetAddress serverAddress = InetAddress.getByName(IPo);
try{
Clientsocketo = new Socket(serverAddress,Porto);
ObjectOutputStream oos = new ObjectOutputStream(Clientsocketo.getOutputStream());
oos.writeObject("Hello World");
ObjectInputStream ois = new ObjectInputStream(Clientsocketo.getInputStream());
String massagedf = (String)ois.readObject();
ad.setText(massagedf);
// mHandler.sendMessage(serverMessage);
oos.close();
ois.close();
}
catch(Exception e){
ad.setText("Error");
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ad = (TextView) findViewById(R.id.textView);
}
网络操作必须在AsyncTask中处理。 这允许网络操作继续进行而不会阻塞主线程。 使用AsyncTask的最好方法是创建一个子类。 像这样:
public class SendDataTask extends AsyncTask<Void, Void, Void> {
Socket clientSocketTo;
String msg;
String ipo;
int porto;
InetAddress serverAddress;
public SendDataTask(View v){
EditText aa = (EditText) v.findViewById(R.id.EditText01);
msg = aa.getText().toString
EditText ab = (EditText) v.findViewById(R.id.editText);
ipo = ab.getText().toString();
EditText ac = (EditText) v.findViewById(R.id.editText2);
porto = Integer.parseInt(ac.getText().toString());
serverAddress = InetAddress.getByName(ipo);
}
protected void doInBackground(Void... arg){
try{
clientSocketTo = new Socket(ServerAddress,Porto);
ObjectOutputStream oos = new ObjectOutputStream(clientSocketTo.getOutputStream());
oos.weriteObject("Hello World")
ObjectInputStream ois = new ObjectInputStream(clientSocketTo.getInputStream());
String massagedf = (String) ois.readObject();
ad.setText(massagedf);
oos.close();
ois.close();
}catch (Exception e){
}
}
protected void onPostExecute(Void result){
}
}
要调用此方法,您将实例化传递您的视图的类,然后调用execute方法:
new SendDataTask(yourView).execute();
此代码均未经过测试...希望对您有所帮助!
更多信息: http : //developer.android.com/reference/android/os/AsyncTask.html http://androidsrc.net/android-client-server-using-sockets-client-implementation/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.