1. 程式人生 > >套接字通信(TCP)

套接字通信(TCP)

運行 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)