套接字通信(TCP)
阿新 • • 發佈:2017-10-01
運行 1.10 通信 option cte super 轉換成 generated 服務器
Socket又稱套接字,在程序內部提供了與外界通信的端口,即端口通信。通過建立socket連接,可為通信雙方的數據傳輸傳提供通道。socket的主要特點有數據丟失率低,使用簡單且易於移植。
玩socket通信要一臺手機,建立一個app工程(作為客戶端),一個普通java工程(作為服務端)
=====================================================================================================================================================
服務端代碼:
public class socketSer { public static void main(String[] args) { // TODO Auto-generated method stub ServerSocket serverSocket = null; try { // 創建一個ServerSocket對象,並讓這個Socket在1989端口監聽 serverSocket = new ServerSocket(1989); // 調用ServerSocket的accept()方法,接受客戶端所發送的請求,// 如果客戶端沒有發送數據,那麽該線程就停滯不繼續 Socket socket = serverSocket.accept(); // 從Socket當中得到InputStream對象 InputStream inputStream = socket.getInputStream(); byte buffer[] = new byte[1024 * 4]; int temp = 0; // 從InputStream當中讀取客戶端所發送的數據while ((temp = inputStream.read(buffer)) != -1) { System.out.println(new String(buffer, 0, temp)); } serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } }
1、監聽一個端口
2、堵塞在accept方法中,直到有數據傳送
3、將socket的輸入流顯示出來
4、服務器端要創建的是ServerSocket
================================================================================================================================================================
服務端activity:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void getButton(View v) { new socketThread().start();//建立socket連接這種耗時操作要在子線程中進行 } } class socketThread extends Thread{ public void run(){ try { //對ip為192.168.1.104的1989端口建立socket連接 Socket socket=new Socket("192.168.1.104", 1989); //在連接的基礎上得到輸出流 OutputStream out = socket.getOutputStream(); String info="asdfghjkl"; //將字符串轉換成byte數組 byte[] buffer=info.getBytes(); //信息寫入輸出流 out.write(buffer); //傳送出去 out.flush(); System.out.println("發送成功"); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
1、布局只有一個按鈕,點擊即刻發送信息
2、因socket通信時連接網絡的耗時操作,所以必須在子線程中運行,否則虛擬機掛掉
3、與一個ip地址的一個端口建立socket通信,再用輸出流送出去
套接字通信(TCP)