在Android上簡單的模擬tcp/ip的通信方式:
1:首先建立一個java類,用來模擬服務端
public class SimpleServer {
public static void main(String[] args) throws Exception{
//ServerSocket對象用於監聽來自客戶端的socket鏈接,如果沒有連接則一直處於等待狀態
ServerSocket ss= new ServerSocket(30000);
//採用循環不斷接收來自客戶端的請求
while (true){
//每當接收到客戶端的一個請求時,服務端也產生一個對應的socket
Socket s = ss.accept();//該方法返回一個與客戶端相對應的socket
OutputStream os = s.getOutputStream();//輸出流用於寫入數據
os.write("i hfhsj hfjsh".getBytes("utf-8"));
//由於window的平臺採用gbk的字符編碼,而Android平臺是Linux系統,採用的是utf-8的字符編碼,
//所以必須手動進行轉碼,否則會出現亂碼
os.close();
s.close();
}
}
}
2:建立一個Android項目,在xml佈局文件中添加一個Textview,用於顯示從服務端讀取到的數據
public class MainActivity extends Activity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView.findViewById(R.id.serverinfo);
new Thread(){//由於網路連接是不穩定的,時間也不確定,因此在UI線程中建立網絡連接會阻塞線程,導致應用崩潰
//所用網路連接要建立在一個新的線程裏面
@Override
public void run() {
//建立連接到遠程服務器的socket
try { //ctrl+alt+t 添加try……catch
Socket s = new Socket("127.0.0.1",30000);//指定服務器的ip地址和端口
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = br.readLine();
textView.setText("來自服務器的信息:"+line);
br.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
}