1. 程式人生 > >Android連接服務器端的Socket

Android連接服務器端的Socket

context cli new t nal .com connect net ica 主線程

package com.example.esp8266;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;

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

public class MainActivity extends Activity {
private EditText edSend, edReceive;
private Button btnConnect, btnSend;
private Handler myHandler;
private SendThread SendThread;
private boolean isReceive = false;
private boolean isConnect = false;
private static final String HOST = "192.168.4.1";
private static final int PORT = 333;
String strMessage;
Socket socket = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edSend = (EditText) findViewById(R.id.edSend);
edReceive = (EditText) findViewById(R.id.edReceive);
btnConnect = (Button) findViewById(R.id.btConnect);
btnSend = (Button) findViewById(R.id.btSend);
// 連接
btnConnect.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {
// TODO Auto-generated method stub
if (!isConnect) {
new Thread(connectThread).start();
isConnect = true;
}
}
});
// 發送
btnSend.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {
// 啟動發送線程
new Thread(SendThread).start();
}
});
myHandler = new Handler() {// UI主線程消息處理函數

public void handleMessage(Message msg) {
Bundle bundle = msg.getData();
String string = bundle.toString();
edReceive.setText(string);
}
};
}

// 連接到服務器的接口
Runnable connectThread = new Runnable() {

public void run() {
// TODO Auto-generated method stub
try {
socket = new Socket(HOST, PORT);
if (socket != null)
Toast.makeText(getApplicationContext(), "連接成功",
Toast.LENGTH_LONG).show();
else
Toast.makeText(getApplicationContext(), "連接失敗",
Toast.LENGTH_LONG).show();
// 初始化發送線程
SendThread = new SendThread(socket);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
// 接收消息的接口
Runnable Receive = new Runnable() {
InputStream inStream;
private byte[] buffer;
private String str = null;

public void run() {
// TODO Auto-generated method stub
while (!isReceive) {
buffer = new byte[512];
try {
inStream = socket.getInputStream();
inStream.read(buffer);
} catch (IOException e) {
e.printStackTrace();
}
str = new String(buffer);
Bundle bundle = new Bundle();
bundle.get(str);
Message message = new Message();
message.setData(bundle);
myHandler.sendMessage(message);
}
}
};

// 發送線程
private class SendThread extends Thread {
private OutputStream outStream = null;

private String str = null;

SendThread(Socket socket) {
try {
outStream = socket.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
}

public void run() {
// while(true){
str = edSend.getText().toString().trim();
PrintStream pt = new PrintStream(outStream);
pt.print(str);
new Thread(Receive).start();
// }
}
}

protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if (Receive != null) {
isReceive = false;
((Thread) Receive).interrupt();
}
}

}

技術分享

Android連接服務器端的Socket