android Socket 編程

【轉載請註明出處:http://blog.csdn.net/zjbpku/article/details/7752072


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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章