android Socket 編程

來源:互聯網
上載者:User

Socket 通訊
            1.UDP實現  (DatagramSocket)
【用戶端】
//首先建立一個DatagramSocket對象
DatagramSocket socket = new DatagramSocket(4567);
//建立一個InetAddress
InetAddress serverAddress = InetAddress.getByName("192.168.1.104");
String str = "hello";  //這是要傳輸的資料
byte data [] = str.getBytes();  //把傳輸內容分解成位元組
//建立一個DatagramPacket對象,並指定要講這個資料包發送到網路當中的哪個、地址,以及連接埠號碼
DatagramPacket packet = new DatagramPacket(data,data.length,serverAddress,4567);
//調用socket對象的send方法,發送資料
socket.send(packet);

【伺服器端】
//建立一個DatagramSocket對象,並指定監聽的連接埠號碼
                DatagramSocket socket = new DatagramSocket(4567);
                byte data [] = new byte[1024];
                //建立一個空的DatagramPacket對象
                DatagramPacket packet = new DatagramPacket(data,data.length);
                //使用receive方法接收用戶端所發送的資料,
                //如果用戶端沒有發送資料,該進程就停滯在這裡
                socket.receive(packet);
                String result = new String(packet.getData(),packet.getOffset(),packet.getLength());

2.TCP通訊
【用戶端】
建立一Socket對象並指明伺服器端的IP及連接埠號碼
Socket socket = new Socket("192.168.1.0",45678);
//向伺服器發送訊息
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
out.println(message);
//從伺服器接收訊息
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String rString = is.readLine().toString();

【伺服器端】
//建立一個ServerSocket對象,並讓這個Socket在45678連接埠監聽
serverSocket = new ServerSocket(45678);
//調用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)
{
                   String str = new String(buffer,0,temp);
  //接下來可以對從用戶端接收到的訊息做處理
               }
 

【Socket擷取用戶端IP地址及連接埠號碼】
   Socket類包含一些非常有用的屬性,這些屬性允許確定關於正在串連的用戶端的資訊。其中關鍵資訊之一
   是返回EndPoint對象的RemoteEndPoint屬性。EndPoint類本身是抽象的,要想收集有用的資訊,需·要把
   EndPoint強制類型轉換為IPEndPoint對象。IPEndPoint類包含遠程用戶端的IP地址和連接埠號碼。具體用法如下:
   TcpListener tcpl=new TcpListener(port);
   Socket s=tcpl.AcceptSocket();
   label1.text=((IPEndPoint)s.RemoteEndPoint).Address.ToString();
   label2.text=((IPEndPoint)s.RemoteEndPoint).Port.ToString();

 

作者:zjbpku

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.