android開發之socket通訊 向PC機發資訊 擷取本機IP

來源:互聯網
上載者:User
 今天早早的就完成了任務,給大家分享一下socket編程。

android中使用的是java的socket模型,如果你學過java網路編程,那麼你對它一定不陌生。

今天我主要使用TCP協議實現通訊的。

小知識點:UDP協議和TCP協議的不同。UDP是把資料都打成資料包,資料包上內建通訊的地址,但是資料包發出去之後UDP協議不能保證你能否收到。而TCP協議要求接收方收到資料後給個回應,當發送重要資料的時候就可以選擇TCP協議。UDP發送資料的量是有限的,而TCP是沒有限制的,當然這導致UDP很快,TCP相對慢點。根據不同的情況,有不同的選擇。

一,通訊的基本結構:用戶端和伺服器端 

       用戶端這邊是Socket類:用戶端指定給某個伺服器端上的某個連接埠發送訊息。比如向10.10.16.162這台機器的10000號連接埠發送訊息。

       伺服器端是ServiceSocket類:伺服器端就在10000號這個連接埠上監聽,一旦有訊息來立刻捕捉還可以有所回應。

         用戶端通過OutputStream向伺服器端發送資料,伺服器端通過InputStream擷取資料,即OutputStream(發)——>InputStream(收) 如果伺服器端想回傳訊息也是同樣的道理。

二,執行個體講解編寫伺服器端和用戶端

 1,伺服器端:這是個純java的project,單獨在一個工程

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;public class ServerSocketText {public static void main(String[] args) {new ServerThread().start();}}// 建立一個線程在後台監聽class ServerThread extends Thread {private static int Port = 10000;ServerSocket serversocket = null;public void run() {try {// 建立一個serversocket對象,並讓他在Port連接埠監聽serversocket = new ServerSocket(Port);while (true) {// 調用serversocket的accept()方法,接收用戶端發送的請求Socket socket = serversocket.accept();BufferedReader buffer = new BufferedReader(new InputStreamReader(socket.getInputStream()));// 讀取資料String msg = buffer.readLine();System.out.println("msg:" + msg);}} catch (IOException e) {e.printStackTrace();} finally {try {serversocket.close();} catch (IOException e) {e.printStackTrace();}}}}

2,用戶端:這是個android的用戶端,用於發送訊息

import java.io.BufferedWriter;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.InetAddress;import java.net.NetworkInterface;import java.net.Socket;import java.net.SocketException;import java.net.UnknownHostException;import java.util.Enumeration;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class Client extends Activity {private static String IpAddress = "10.10.16.97";private static int Port = 10000;private EditText edittext = null;private Button send = null;Socket socket = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);edittext = (EditText) findViewById(R.id.edittext);send = (Button) findViewById(R.id.send);send.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {sendMsg();}});}// 發送資訊public void sendMsg() {try {// 建立socket對象,指定伺服器端地址和連接埠號碼socket = new Socket(IpAddress, Port);// 擷取 Client 端的輸出資料流PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);// 填充資訊out.println(edittext.getText());System.out.println("msg=" + edittext.getText());// 關閉} catch (UnknownHostException e1) {e1.printStackTrace();} catch (IOException e1) {e1.printStackTrace();} finally {try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}

3,注意事項:

記得在AndroidManifest.xml中添加你的網路許可權

<uses-permission android:name="android.permission.INTERNET"/>

activity布局就是一個edittext和已個button,所以沒貼出代碼。

運行時最好先android 在伺服器端,這樣用戶端發訊息時才方便查看。

4,知識擴充:擷取android手機的ip地址

只要能擷取到ip地址的話,我們就可以讓PC機和android實現聊天功能。但是這裡我就不示範了怎麼實現了。

 

public String getLocalIpAddress() {try {for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();en.hasMoreElements();) {NetworkInterface intf = en.nextElement();for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();enumIpAddr.hasMoreElements();) {InetAddress inetAddress = enumIpAddr.nextElement();if (!inetAddress.isLoopbackAddress()) {return inetAddress.getHostAddress().toString();}}}} catch (SocketException ex) {}return null;}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.