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>