TCP/IP網絡通信協議

在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();



    }


}



發佈了31 篇原創文章 · 獲贊 44 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章