Android学习札记(二十二)
Android学习笔记(二十二)
Socket编程
TCPServer
import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; public class TCPServer { public static void main(String args[]) { try { while (true) { ServerSocket ss = new ServerSocket(6666); Socket sk = ss.accept(); InputStream inStream = sk.getInputStream(); int length = 0; byte[] buffer = new byte[1024]; while ((length = inStream.read(buffer)) != -1) { System.out.print(new String(buffer, 0, length)); } sk.close(); } } catch (Exception e) { e.printStackTrace(); } } }
TCPClientActivity
package org.wp.activity; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class TCPClientActivity extends Activity { private Button sendButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); sendButton = (Button) this.findViewById(R.id.sendButton); sendButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new TCPClient().start(); } }); } class TCPClient extends Thread { @Override public void run() { try { Socket sk = new Socket("192.168.1.105", 6666); InputStream inStream = TCPClientActivity.this.getClassLoader() .getResourceAsStream("workers.xml"); OutputStream outStream = sk.getOutputStream(); byte[] buffer = new byte[1024]; int length = inStream.read(buffer); while (length != -1) { outStream.write(buffer, 0, length); length = inStream.read(buffer); } } catch (Exception e) { e.printStackTrace(); } } } }
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.wp.activity" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".TCPClientActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <!-- Allows applications to open network sockets --> <uses-permission android:name="android.permission.INTERNET" /> <uses-sdk android:minSdkVersion="4" /> </manifest>
UDPServer
import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDPServer { public static void main(String args[]) { try { DatagramSocket ds = new DatagramSocket(6666); byte[] buffer = new byte[1024]; DatagramPacket dp = new DatagramPacket(buffer, buffer.length); ds.receive(dp); String result = new String(dp.getData(), dp.getOffset(), dp.getLength()); System.out.println(result); } catch (Exception e) { e.printStackTrace(); } } }
UDPClientActivity
package org.wp.activity; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class UDPClientActivity extends Activity { private Button sendButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); sendButton = (Button) findViewById(R.id.sendButton); sendButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new UDPClient().start(); } }); } class UDPClient extends Thread { @Override public void run() { try { InputStream inStream = UDPClientActivity.class.getClassLoader() .getResourceAsStream("workers.xml"); BufferedReader br = new BufferedReader(new InputStreamReader( inStream)); StringBuilder sb = new StringBuilder(); String str = null; while ((str = br.readLine()) != null) { sb.append(str + "\n"); } byte[] buffer = sb.toString().getBytes(); DatagramSocket ds = new DatagramSocket(8888); InetAddress inetAddress = InetAddress .getByName("192.168.1.105"); DatagramPacket dp = new DatagramPacket(buffer, buffer.length, inetAddress, 6666); ds.send(dp); } catch (Exception e) { e.printStackTrace(); } } } }
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.wp.activity" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".UDPClientActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <!-- Allows applications to open network sockets --> <uses-permission android:name="android.permission.INTERNET" /> <uses-sdk android:minSdkVersion="4" /> </manifest>