iLMS知識社群歷程檔登入
位置: 網路程式設計 > 作業 > NetProg100_20120426_EchoClient
作業資訊  |  已交名單(26)
項目 內容
允許遲交
開放觀摩
屬性 個人作業
成績比重 2%
期限
2012-04-26 23:59
附件
描述 As title.

James

// ---------------
package tw.edu.hust.bn98000;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class EchoClient extends Activity implements OnClickListener {
//
EditText edServer, edData;
Button btnConnect, btnDisconnect, btnSend;
TextView tvResult;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//
edServer = (EditText) findViewById(R.id.edServer);
edData = (EditText) findViewById(R.id.edData);
btnConnect = (Button) findViewById(R.id.btnConnect);
btnSend = (Button) findViewById(R.id.btnSend);
btnDisconnect = (Button) findViewById(R.id.btnDisconnect);
tvResult = (TextView) findViewById(R.id.tvResult);
//
btnConnect.setOnClickListener(this);
btnSend.setOnClickListener(this);
btnDisconnect.setOnClickListener(this);
}

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch (arg0.getId()) {
case R.id.btnConnect:
connect();
break;
case R.id.btnSend:
send();
break;
case R.id.btnDisconnect:
disconnect();
break;
}
}

private void disconnect() {
// TODO Auto-generated method stub
try {
cs.close();
Toast.makeText(this, "斷線成功!", Toast.LENGTH_LONG).show();
} catch (IOException e) {
// TODO Auto-generated catch block
Toast.makeText(this, "IO錯誤!", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}

private void send() {
// TODO Auto-generated method stub
String msg = edData.getText().toString();
try {
bw.write(msg + "\n");
bw.flush();
Toast.makeText(this, "傳送成功!", Toast.LENGTH_LONG).show();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

MyHandler handler = new MyHandler();

Socket cs;
BufferedReader br;
BufferedWriter bw;

private void connect() {
// TODO Auto-generated method stub
try {
cs = new Socket("entry.hust.edu.tw", 7);
InputStream in = cs.getInputStream();
OutputStream out = cs.getOutputStream();
br = new BufferedReader(new InputStreamReader(in));
bw = new BufferedWriter(new OutputStreamWriter(out));
Toast.makeText(this, "連線成功!", Toast.LENGTH_LONG).show();
// 處理輸入的 Thread !
new Thread() {

@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
String data = br.readLine();
//tvResult.append(data + "\n");
Bundle bb = new Bundle();
bb.putString("ECHO", data);
Message msg = new Message();
msg.setData(bb);
handler.sendMessage(msg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

}.start();

} catch (UnknownHostException e) {
// TODO Auto-generated catch block
Toast.makeText(this, "主機名稱錯誤!", Toast.LENGTH_LONG).show();
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
Toast.makeText(this, "IO錯誤!", Toast.LENGTH_LONG).show();
e.printStackTrace();
}

}

class MyHandler extends Handler {

@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
            tvResult.append(msg.getData().getString("ECHO")+"\n");
}

}
}