`

Android网络连接3——基于Socket

 
阅读更多

Andoird中能够使用java中封装的Socket通信机制。

服务端:

 

public class SimpleServer {
	public static void main(String[] args) throws IOException {
		// 创建一个ServerSocket,用于监听客户端Socket的连接请求
		ServerSocket ss = new ServerSocket(30000);
		// 采用循环不断接受来自客户端的请求
		while (true) {
			// 每当接受到客户端Socket的请求,服务器端也对应产生一个Socket
			Socket s = ss.accept();
			OutputStream os = s.getOutputStream();
			os.write("Hello , this is Server !\n".getBytes("utf-8"));
			// 关闭输出流,关闭Socket
			os.close();
			s.close();
		}
	}
}

  Android客户端的简单实现 :

 

 

public class SimpleClient extends Activity {
	EditText show;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		show = (EditText) findViewById(R.id.show);
		try {
			Socket socket = new Socket("192.168.1.120", 30000);
			BufferedReader br = new BufferedReader(new InputStreamReader(
					socket.getInputStream()));
			String line = br.readLine();
			show.setText("来自服务器的数据:" + line);
			br.close();
			socket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 ==========================

 

加入线程后:

服务端:

public class MyServer {
	public static void main(String[] args) throws IOException {
		ServerSocket ss = new ServerSocket(30000);
		while (true) {
			Socket s = ss.accept();
			// 每当客户端连接后启动一条ServerThread线程为该客户端服务
			new Thread(new ServerThread(s)).start();
		}
	}
}

public class ServerThread implements Runnable {
	// 定义当前线程所处理的Socket
	Socket s = null;
	// 该线程所处理的Socket所对应的输入流
	BufferedReader br = null;
	public ServerThread(Socket s) throws IOException {
		this.s = s;
		// 初始化该Socket对应的输入流
		br = new BufferedReader(new InputStreamReader(s.getInputStream(),
				"utf-8")); // ②
	}
	public void run() {
		try {
			String content = null;
			while ((content = br.readLine()) != null) {
				OutputStream os = s.getOutputStream();
				os.write((content + "\n").getBytes("utf-8"));
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 

客户端代码:

public class MultiThreadClient extends Activity {
	EditText input, show;// 定义界面上的两个文本框
	Button send;// 定义界面上的一个按钮
	OutputStream os;
	Handler handler;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		input = (EditText) findViewById(R.id.input);
		send = (Button) findViewById(R.id.send);
		show = (EditText) findViewById(R.id.show);
		Socket s;
		handler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				// 如果消息来自于子线程
				if (msg.what == 0x123) {
					// 将读取的内容追加显示在文本框中
					show.append("\n" + msg.obj.toString());
				}
			}
		};
		try {
			s = new Socket("192.168.1.120", 30000);
			// 客户端启动ClientThread线程不断读取来自服务器的数据
			new Thread(new ClientThread(s, handler)).start(); // ①
			os = s.getOutputStream();
		} catch (Exception e) {
			e.printStackTrace();
		}
		send.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				try {
					os.write((input.getText().toString() + "\r\n")
							.getBytes("utf-8"));
					// 清空input文本框
					input.setText("");
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
}

 客户端处理线程

 

public class ClientThread implements Runnable {
	private Socket s;
	private Handler handler;
	BufferedReader br = null;

	public ClientThread(Socket s, Handler handler) throws IOException {
		this.s = s;
		this.handler = handler;
		br = new BufferedReader(new InputStreamReader(s.getInputStream()));
	}

	public void run() {
		try {
			String content = null;
			// 不断读取Socket输入流中的内容。
			while ((content = br.readLine()) != null) {
				// 每当读到来自服务器的数据之后,发送消息通知程序界面显示该数据
				Message msg = new Message();
				msg.what = 0x123;
				msg.obj = content;
				handler.sendMessage(msg);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

分享到:
评论

相关推荐

    安卓Android源码——基于socket通讯的文件续传!.zip

    在安卓(Android)平台...综上所述,"安卓Android源码——基于socket通讯的文件续传!"的项目可能包含一个实现上述逻辑的示例应用,通过分析和学习,开发者可以掌握如何在Android应用中实现实用且高效的文件续传功能。

    安卓Android源码——(Socket协议).rar

    这份"安卓Android源码——(Socket协议).rar"压缩包文件可能包含了关于如何在Android平台上实现Socket通信的详细教程或者示例代码。以下是关于Android中Socket协议及相关知识点的详细解释: 1. **Socket基础知识**:...

    安卓Android源码——(Socket协议).zip

    Socket是基于TCP/IP协议族的通信接口,可以视为在网络中两台计算机之间建立连接的桥梁。一个Socket由IP地址和端口号唯一标识,这样数据就能在不同的设备间准确传输。在Android应用中,我们可以使用Java的Socket类和...

    Android源码——Socket编程源码(与PC通讯).zip

    本资源"Android源码——Socket编程源码(与PC通讯).zip"提供了相关的源代码示例,帮助开发者理解如何在Android应用中实现基于Socket的通讯机制。本文将详细讲解Android Socket编程及其与PC通信的关键知识点。 1. *...

    基于Android的网络游戏开发——易扑克网络对战游戏.zip

    在本项目中,"基于Android的网络游戏开发——易扑克网络对战游戏.zip"是一个包含源码的压缩包,主要用于教学和学习如何在Android平台上开发网络游戏,特别是扑克类的网络对战游戏。以下将详细解析该项目可能涉及的...

    安卓Android源码——基于手机的远程视频监控系统.zip

    在本项目中,“安卓Android源码——基于手机的远程视频监控系统”是一个使用Android平台开发的应用,它允许用户通过智能手机实现远程视频监控。这个系统的关键在于整合了图像处理、网络通信以及Android应用开发技术...

    安卓Android源码——android在wifi下手机与电脑的socket通信.zip

    本项目"安卓Android源码——android在wifi下手机与电脑的socket通信.zip"提供了具体的示例,帮助开发者理解如何在WiFi环境下实现手机与电脑的Socket连接。 首先,让我们深入了解一下Socket通信的基本原理。Socket是...

    android 网络编程 客户端完整代码 socket http

    本文将深入探讨Android中基于Socket和HTTP的网络编程,包括它们的概念、实现方式以及如何构建一个完整的客户端代码。 1. Socket(套接字)网络编程: Socket是网络通信的基础,它提供了进程间通信的能力,使得运行...

    安卓Android源码——安卓Android源码安卓与PC的Socket通信项目C70版+Java版.rar

    这个"安卓Android源码——安卓Android源码安卓与PC的Socket通信项目C70版+Java版.rar"包含两个版本的源代码,一个是基于C#语言的,另一个是基于Java语言的,这为开发者提供了选择不同编程语言实现相同功能的灵活性。...

    安卓Android源码——安卓Android源码安卓与PC的Socket通信项目java版.zip

    Socket提供了基于TCP/IP协议的端对端连接,确保数据的可靠传输。在Android中,由于权限管理,我们需要在`AndroidManifest.xml`中声明INTERNET权限。 2. **建立Socket连接**: 在Android应用中,通常在Service或...

    安卓Andriod源码——基于手机的远程视频监控系统.zip

    在本项目中,“安卓Andriod源码——基于手机的远程视频监控系统”是一个实现手机远程视频监控的应用程序。这个项目的核心是利用Android平台的功能,将手机转变为一个可远程访问的摄像头,允许用户通过网络查看实时...

    项目文件——基于CS模式的android手机与PC机通信系统的开发

    3. **Socket编程**:在Android和PC之间建立通信通道的关键是Socket。Android端需要创建一个Socket,连接到PC的特定端口,然后通过输入输出流进行数据交换。PC端也需要监听特定端口,接受Android设备的连接请求,并...

    安卓Android源码——例子源码Socket实现粗略的聊天室功能.zip

    Socket是基于TCP/IP协议的一种通信机制,它允许两个网络应用程序之间进行双向数据传输。在安卓应用中,Socket通常用于构建网络连接,发送和接收字符串或二进制数据。在这个例子中,我们可能会看到一个Socket作为...

    Android网络编程-聊天室开发

    Android聊天室项目是基于Socket网络编程的一个典型应用案例。通过本项目的开发,开发者可以深入了解如何利用Android设备与服务器端进行通信,实现多人在线聊天的功能。本资料详细介绍了如何在Android平台上使用...

    智能家居客户端实现——Android Studio版

    智能家居客户端实现——Android Studio版是将现代科技与日常生活相结合,为用户提供便捷、智能的生活环境的项目。基于Android Studio开发的这个客户端,旨在让用户通过智能手机就能远程操控家中的各种智能设备,如...

    安卓Android源码——精典源码之在wifi下手机与电脑的socket通信.zip

    本资源“安卓Android源码——精典源码之在wifi下手机与电脑的socket通信.zip”提供了实现这一功能的示例代码,旨在帮助开发者理解和实践Android设备通过WiFi利用Socket进行通信的技术。 首先,我们要理解Socket的...

    安卓Android源码——客户端连接服务器并交互实例.zip

    这个"安卓Android源码——客户端连接服务器并交互实例.zip"压缩包提供了实现这一功能的示例代码,帮助开发者理解和掌握如何在Android应用中实现网络通信。下面我们将详细探讨这一主题。 1. **TCP/HTTP通信基础**: ...

Global site tag (gtag.js) - Google Analytics