`

通过Wifi实现设备间的通信

阅读更多
服务器端,建立监听(方法更新,可以同时连接多个Client)
public class Server extends ServerSocket {

	private static ArrayList<String> mUserList = new ArrayList<String>();
	private static ArrayList<Thread> mThreader = new ArrayList<Thread>();
	private static LinkedList<String> mMessageArray = new LinkedList<String>();
	private static int mThreadCounter = 0;
	private static boolean isClear = true;

	public Server(int port) throws IOException {

		super(port);
		new Broadcast();

		try {
			while (true) {
				Socket socket = accept();
				new CreateServerThread(socket);
			}
		} catch (IOException e) {
		} finally {
			close();
		}
	}

	// --- CreateServerThread
	class CreateServerThread extends Thread {

		private Socket client;
		private BufferedReader in;
		private PrintWriter out;
		private String username;

		public CreateServerThread(Socket s) throws IOException {
			client = s;
			in = new BufferedReader(new InputStreamReader(
					client.getInputStream(), "UTF8"));
			out = new PrintWriter(client.getOutputStream(), true);
			sendMessage("--- Welcome ---");
			sendMessage("Input your nickname:");
			start();
		}

		public void sendMessage(String msg) {
			out.println(msg);
			System.out.println(msg);
		}

		public void run() {
			try {
				int flag = 0;
				mThreadCounter++;
				String line = in.readLine();
				while (line == null || !line.equals("bye")) {
					if (line == null) {
						// sendMessage("null");
						line = in.readLine();
						continue;
					}

					if (line.equals("l")) {
						sendMessage(listOnlineUsers());
						line = in.readLine();
						continue;
					}

					if (flag++ == 0) {
						username = line;
						mUserList.add(username);
						sendMessage(listOnlineUsers());
						mThreader.add(this);
						pushMessage("[< " + username + " come on in >]");
					} else {
						pushMessage("<" + username + ">" + line);
					}

					line = in.readLine();
				}

				sendMessage("--- See you, bye! ---");
				client.close();
			} catch (IOException e) {
			} finally {
				try {
					client.close();
				} catch (IOException e) {
				}
				mThreadCounter--;
				mThreader.remove(this);
				mUserList.remove(username);
				pushMessage("[< " + username + " left>]");
			}
		}

		private String listOnlineUsers() {
			String s = "-+- Online list -+-1512";
			for (int i = 0; i < mUserList.size(); i++) {
				s += "[" + mUserList.get(i) + "]1512";
			}
			s += "-+---------------------+-";
			return s;
		}

		private void pushMessage(String msg) {
			mMessageArray.addLast(msg);
			isClear = false;
		}
	}

	// --- Broadcast
	class Broadcast extends Thread {
		public Broadcast() {
			start();
		}

		public void run() {
			while (true) {
				if (!isClear) {
					String tmp = mMessageArray.getFirst();
					for (int i = 0; i < mThreader.size(); i++) {
						CreateServerThread client = (CreateServerThread) mThreader
								.get(i);
						client.sendMessage(tmp);
					}
					mMessageArray.removeFirst();
					isClear = mMessageArray.size() > 0 ? false : true;
				}
			}
		}
	}
}

客户端,发送消息
public class Client {

	private Socket socket;
	private BufferedReader in;
	private PrintWriter out;

	public Client(String domain, int port) {
		connect(domain, port);
		get(in);
	}

	private void connect(String domain, int port) {
		try {
			socket = new Socket(domain, port);
			in = new BufferedReader(new InputStreamReader(
					socket.getInputStream()));
			out = new PrintWriter(socket.getOutputStream(), true);
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private void get(final BufferedReader in) {

		new Thread(new Runnable() {

			public void run() {

				try {
					String line = in.readLine();
					while (true) {
						line = in.readLine();
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}).start();
	}

	public void send(String msg) {
		out.println(msg);
	}

	public void disconnect() {
		try {
			out.close();
			in.close();
			socket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
分享到:
评论
2 楼 dai_lm 2012-10-02  
lyx0224 写道
强~~~~~

过奖,只是总结了前人的智慧,拼拼凑凑后的代码
1 楼 lyx0224 2012-09-27  
强~~~~~

相关推荐

    Android设备之间通过Wifi通信的示例代码

    Android 设备之间通过 Wifi 通信的示例代码主要介绍了 Android 设备之间如何通过 Wifi 进行通信的示例代码,实现 Android 设备之间的互联互通。 在 Android 设备之间进行 Wifi 通信时,需要实现的目标是让 Android ...

    android中通过wifi连接通信代码

    利用WiFi进行设备间的通信不仅可以实现数据的快速传输,还可以构建出多种多样的应用场景,如远程控制、即时消息等。本文将详细介绍一个基于Android平台的WiFi通信代码案例,帮助读者理解和掌握如何在Android应用中...

    Android-实现了Android设备之间通过Wifi传输文件的功能

    在Android平台上,实现设备间通过Wi-Fi进行文件传输是一项实用且常见的功能,尤其在没有数据线或者蓝牙的情况下。本文将详细解析如何利用Android的网络编程技术来构建这样的应用。 首先,我们要理解Android的网络...

    Android开发APP通过WiFi与51单片机串行通信.rar

    在Android应用开发中,将设备与51单片机通过WiFi进行串行通信是一项常见的物联网(IoT)技术。此项目涉及多个关键技术点,包括Android Studio的使用、89C51单片机编程、ESP8266 WiFi模块以及串行通信协议。下面将详细...

    wifi通信源码,可以和电脑或者手机通信

    接着,要实现设备间的通信,通常需要使用TCP/IP或UDP协议。在Android中,我们可以使用`Socket`或`DatagramSocket`类进行网络编程。源码中可能会包含创建服务器端(Server)和客户端(Client)的逻辑,以及它们之间的...

    用IPHONE通过WIFI控制设备.pdf

    这种特性使得IPHONE能够直接通过WIFI连接至设备,实现远程控制。 #### 二、AD-HOC模式下的网络构建 HLK-WIFI-M03模块启动后,可以自动创建一个AD-HOC网络,IPHONE只需加入该网络,即可实现数据的透明传输。这意味...

    E4A(易安卓) wifi通信

    E4A支持多种Android API,包括网络通信API,这使得它能与各种硬件设备进行数据交换,例如通过WiFi连接的单片机。 单片机,也称为微控制器,是一种集成化的微型计算机,主要用于控制电子设备。在本案例中,单片机...

    uni-app调用Android原生可以实现通信及打开WiFi

    **实现通信**\n 要实现uni-app与Android原生间的通信,首先需要在Android端创建一个BroadcastReceiver监听特定的广播事件,然后在uni-app端发送对应的广播。例如,uni-app可以通过`uni.sendBroadcast`方法发送一个...

    wifi热点通信

    WiFi热点通信是一种无线网络通信技术,它允许设备通过创建一个WiFi热点来共享互联网连接或进行设备间的通信。在本文中,我们将深入探讨WiFi热点通信的工作原理、应用以及相关的编程技术。 首先,我们要理解WiFi热点...

    C#编写wifi无线通讯示例

    在C#中实现WiFi通信,开发者需要掌握以下关键技术: - **SSID探测**:通过NetworkInformation类的Ping方法可以探测周围可用的WiFi网络,获取SSID(服务集标识符)信息。 - **连接到网络**:使用Wlan类(可能需要...

    wifi模块-uart通信

    首先,标题和描述提到的“wifi模块-uart通信”指向了将传统的串行通信设备通过WiFi模块接入无线网络的技术,以及通过串口实现与WiFi模块之间的数据交互。 从文件提供的内容来看,我们可以梳理出以下知识点: ### 1...

    实现基于CAN通信技术和WiFi通信技术的火灾监控系统

    2. WiFi 通信技术:WiFi(Wireless Fidelity)是一种无线网络技术,能够实现设备之间的无线通信。WiFi 通信技术广泛应用于智能家居、工业自动化、物联网等领域。 3. 火焰传感器:火焰传感器是一种用于检测火焰的...

    android 串口 上位机程序 集成wifi和蓝牙通信

    这个程序设计允许Android设备作为客户端,通过WiFi或蓝牙与服务器端模块进行数据交互。下面将详细介绍相关的知识点。 首先,我们要了解**Android串口通信**。在Android系统中,由于安全限制,直接访问硬件串口是不...

    Android项目源码安卓手机之间WIFI通信源码

    通过Wi-Fi通信,我们可以让设备间共享数据,实现对等网络服务,如文件传输、游戏交互或者智能家居控制。以下是一些关于Android手机之间Wi-Fi通信的核心知识点: 1. **Wi-Fi Direct**:Wi-Fi Direct是一种点对点连接...

    两个WIFI通信

    总之,“两个WIFI通信”的项目展示了如何利用STM32控制器和多串口通信技术实现两个Wi-Fi模块间的双向AT指令交互,这对于物联网设备、智能家居以及工业自动化等领域的应用具有重要意义。通过深入理解和实践此类技术,...

    Android手机通过wifi实现数据传输

    Wi-Fi技术不仅用于网络连接,还可以实现设备间的短距离数据共享。本文将深入探讨如何利用Android系统的架构来实现这一功能。 一、Android系统与Wi-Fi架构 Android系统基于Linux内核,提供了一个强大的网络框架,...

    android 的wifi 通信示例 服务端

    1. **WiFi Direct**:在Android中,实现设备间直接通信通常采用WiFi Direct技术。它允许设备建立点对点的无线连接,无需接入点。WiFi Direct提供了高速、低延迟的数据传输能力,非常适合设备间的直接通信。 2. **...

    app inventor自定义的wifi通信app

    "app inventor自定义的wifi通信app" 这个标题表明我们讨论的是一个使用App Inventor开发的应用程序,它的核心功能是通过Wi-Fi进行通信。App Inventor是Google开发的一款图形化编程工具,特别适合初学者用于创建手机...

Global site tag (gtag.js) - Google Analytics