`

通过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  
强~~~~~

相关推荐

    实验五 WIFI无线通信系统实验.docx

    1、模块连接 连接开发板和WiFi模块,连接...串口无线 STA(COM-STA)模式,模块作为无线 WIFI STA,用于连接到无线网络,实现串口与其他设备之间的无线(WIFI)数据转换互传。该模式下,选择设置TCP 客户端子模式。

    基于多系统融合的4G+WiFi无线通信分站研究与应用

    为提高煤矿安全生产程度及工作效率、降低煤矿工人劳动强度,研究将井下广泛使用的4G无线通信、WiFi、以太网传输、总线接入等设备集成为一台多网络覆盖的设备,依托通信网络,打造井下数据传输的开放式"高速公路",以解决...

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

    之前写过PC与Android之间通过WIFI通信(通过Socket,可以在博客里面搜索),PC作为主机,Android作为客户机,现在手头有一台仪器通过wifi传输数据,如果仪器作为主机发射WIFI热点信号,Android需要连接到该热点才能...

    分布式软总线组件,软总线发现、组网、传输功能实现

    分布式软总线实现近场设备间统一的分布式通信管理能力,提供不区分链路的设备间发现连接、组网和传输能力;提供基于Wifi、蓝牙等通信方式的设备发现连接能力。提供统一的设备组网和拓扑管理能力,为数据传输提供已...

    无线WIFI路由模块在充电桩的通信应用

    (5)核心设备光载无线交换机还具有容量重构的功能,在不改变现有硬件设备的情况下,实现局部区域的通信容量增加; (6)便于开展综合业务和功能扩展,如提供停车场的车辆管理、客户的无线接入等其他增值业务; (7...

    串口转wifi-uart转wifi模块设置

    他的目的是为以开放或安全加密的方式提供符合标准的无线连接,应用于如工业设备、医疗电子系统、POS设备、传感器网络系统和计量设备,M2M通信和远程配置应用程序。 模块特色: 体积小巧,方便集成于手持设备中; ...

    android WIFI下客户端和服务端互相通信

    本项目是一个使用softAP实现多方聊天通讯的例子源码,首先把多部手机连接到一个局域网中,在一个手机上安装服务端,然后服务端会自动显示一个可访问的IP地址并等待客户端连接,在其他手机上安装客户端,输入服务端...

    C#编写wifi无线通讯示例

    wifi无线通讯示例,微软提供。适用于wince手机,windowsmobile系统。语言为C#。

    基于矿井WiFi通信系统的混合定位方法研究

    提出了一种基于矿井WiFi通信系统的混合定位方法,该方法分粗细两步进行定位:粗定位采用基于蜂窝小区标识的非测距定位方法,确定目标所在的小区范围;细定位采用基于接收信号强度的测距定位方法。该混合定位方法可以在不...

    基于移动终端的WIFI签到系统

    (2)安卓移动设备在连接上WIFI时可以通过安卓系统WIFI Manager类管理WIFI状态,获得设备的物理地址,通过这一物理地址作为与学生学号绑定的条件,解决学生代签漏签问题。 (3)开发出教师使用端,主要功能是释放...

    WifiP2pManage demo

    android 通过wifi热点,p2p连接 ,实现局域网,多台设备局域网通信。

    基于STM32的武警哨位联动报警系统设计,支持以太网和WIFI通信(原理图PCB(PDF)、源码、论文等).rar

    STM32处理器扩展了MP3、LCD触摸屏、SD卡、LED、按键、继电器等子模块,主要负责检测按键输入、生成/解析通信协议、读取存储文件数据、实现立体化报警、外部设备控制等工作,C8051F340处理器扩展了以太网通信子模块...

    煤矿应急通信保障系统的设计

    该系统的核心即应急救援软件平台通过中继网关、专用转换器等设备整合井下扩播电话机、小灵通、WiFi手机、调度电话机、井下广播系统,从而实现各通信系统间的互联互通;该系统通过应急救援软件平台实现与矿井人员定位...

    ESP8266WiFi模块

    ESP8266是一款超低功耗的UART-WiFi 透传模块,拥有业内极富竞争力的封装尺寸和超低能耗技术,专为移动设备和物联网应用设计,可将用户的物理设备连接到Wi-Fi 无线网络上,进行互联网或局域网通信,实现联网功能。...

    在VB下用串口通信实现无线通信的方法

    GDI.EXE图形设备接口库,主要内容为与设备输出有关的函数。和串口通信有关系的函数 BuilidCommDCB、ClearCommBreak、SetCommBreak、FlushComm、GetCommError、 GetCommState、WriteComm、ReadComm、SetCommState、...

    Android Wifi 局域网通信 TCP Client Sokect 客户端收发数据例程

    Android Wifi 局域网通信 TCP Client Sokect 客户端收发数据例程,连接别的设备的 socket 服务端后可以与之收发数据,实现通信

    Android基于局域网socket通信

    关于android基于局域网socket通信的完整demo,详细见https://blog.csdn.net/weixin_40998254/article/details/81163701

    基于嵌入式环境的WiFi通信设计方案详解

    通过一个移动监护系统的具体实现,说明方案的有效性。 关键词 IEEE802.11b嵌入式WiFi TCP/IP 移动监护 目前,IEEE802.11无线局域网标准在语音通信、无线办公等领域广泛应用,但主要还是局限在PC机、笔记本电脑等通用...

    车载WiFi路由器技术参数.pdf

    设备加载了广域网通信 VPN 隧道、WIFI 局域网传输的安全认证等安全功能,实现无线局域网和无线广域网的无缝连接,为用户 提供高速、安全、可靠的移动宽带服务。 设备支持:广告 PORTAL 推送,支持多种认证方式(支持...

    ARMLinux与WiFi的移动智能终端门禁系统设计

    设计了一种基于嵌入式ARMLinux平台和WiFi通信的移动智能终端门禁系统,包括门禁装置和用户移动智能终端设备,其中门禁装置采用S3C6410处理器,并以嵌入式Linux为软件开发平台。移动智能终端设备则作为用户开门凭据,...

Global site tag (gtag.js) - Google Analytics