一、什麼是AndroidSocket
AndroidSocket,即Android套接字,它是一種實現安卓客戶端與服務器之間通信的方法。通過套接字,Android客戶端可與服務器建立連接,發送和接收數據,實現實時通信功能。
二、AndroidSocket的工作原理
AndroidSocket的工作原理主要分為以下三個過程:
- 創建Socket對象,在客戶端為客戶端Socket對象,在服務器端為服務器端Socket對象,通過指定服務器的IP地址和端口號來創建和服務器端建立連接;
- 通過輸入輸出流向服務器發送數據和接受數據;
- 關閉Socket連接。
//客戶端
try {
Socket socket = new Socket(SERVER_IP_ADDRESS, SERVER_PORT);
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
DataInputStream dis = new DataInputStream(socket.getInputStream());
dos.writeUTF("Hello server!");
String response = dis.readUTF();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
//服務器端
try {
ServerSocket serverSocket = new ServerSocket(SERVER_PORT);
Socket socket = serverSocket.accept();
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
String request = dis.readUTF();
dos.writeUTF("Hello client!");
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
三、如何在Android應用中使用AndroidSocket
實現AndroidSocket需要注意以下幾點:
- 不要在主線程中創建Socket連接;
- 使用線程池來控制Socket連接的創建和銷毀;
- 使用Handler來將子線程中的數據更新到主線程中。
下面是一個使用AndroidSocket實現聊天室功能的示例代碼:
public class MainActivity extends Activity {
private static final String SERVER_IP_ADDRESS = "192.168.0.101";
private static final int SERVER_PORT = 8888;
private ScrollView mScrollView;
private LinearLayout mContainer;
private EditText mMessageEditText;
private Button mSendButton;
private BufferedReader mBufferedReader;
private PrintWriter mPrintWriter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mScrollView = (ScrollView) findViewById(R.id.scrollView);
mContainer = (LinearLayout) findViewById(R.id.container);
mMessageEditText = (EditText) findViewById(R.id.messageEditText);
mSendButton = (Button) findViewById(R.id.sendButton);
mSendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String message = mMessageEditText.getText().toString();
mPrintWriter.println(message);
mMessageEditText.setText("");
}
});
initSocket();
}
private void initSocket() {
new Thread(new Runnable() {
@Override
public void run() {
try {
Socket socket = new Socket(SERVER_IP_ADDRESS, SERVER_PORT);
mBufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
mPrintWriter = new PrintWriter(socket.getOutputStream(), true);
String message;
while ((message = mBufferedReader.readLine()) != null) {
Message handlerMessage = mHandler.obtainMessage();
handlerMessage.obj = message;
mHandler.sendMessage(handlerMessage);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
String message = (String) msg.obj;
TextView textView = new TextView(MainActivity.this);
textView.setText(message);
mContainer.addView(textView);
mScrollView.fullScroll(View.FOCUS_DOWN);
}
};
}
四、AndroidSocket實現的優缺點
AndroidSocket實現了實時通信功能,可以及時地將信息傳輸到對方設備上,非常便於實現聊天室、網絡遊戲等功能。但是,使用AndroidSocket需要注意線程安全性,需要在線程池中處理Socket連接的創建和銷毀,並且需要使用Handler將數據更新到主線程中。
原創文章,作者:IWBF,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/138743.html