android通过手机热点通信

52 篇文章 0 订阅
2 篇文章 0 订阅

  前几章中讲到了使用手机的热点建立局域网,下面就简单讲下如何通过手机热点建立的局域网与连接到此热点的其它设备(手机或者电脑)通信,在不需要访问外网的情况下,只要连接到手机热点的所有设备间都可以通信,就看程序支持不支持了.

  第一步:创建一个热点,利用前几章博客的WifiAdmin的startAp();传入SSID,密码即可创建一个热点.

  第二步:创建热点成功后,将要通信的设备连接到此热点上.

  第三步:开始编写Socket通信程序,与普通的Socket的用法是完全一样的,

 以下是我的测试机小米手机建立热点,我的笔记本电脑连接到手机热点的通信程序,其中还是让计算机做为ServerSocket端,手机做为Socket端,不喜欢叫服务端和客户端,因为从理论上来讲,只是某一端作为主动连接,一端做为被动接收,当连接建立后所有可通信设备间都可平等的.

  手机Socket程序:

  


public class MyClient extends Activity {
	// ��������ϵ������ı���
	EditText input, show;
	// ��������ϵ�һ����ť
	Button send;
	OutputStream os;
	Handler handler;
	Socket s;

	@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);
		handler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				
				if (msg.what == 0x123) {
					
					show.append("\n" + msg.obj.toString());
				}
			}
		};

		try {

			/**
			 * 建立连接,只要通信双方在一个局域网中即可,无所谓谁是服务器谁是客户端,连接成功后地位都一样了就
			 *         现在这个IP是电脑的IP,热点是手机开放的,可以说明谁连谁是无所谓的,只要连上即可
			 */

			s = new Socket("192.168.43.35", 30000);
			// 接收数据则要放在一个线程里去不停的接收,将一些必要的参数传过去
			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();
				}
			}
		});
	}
}


  ServerSocket端程序:

  


public class MyServer {
	// 定义保存所有Socket的ArrayList
	public static ArrayList<Socket> socketList = new ArrayList<Socket>();

	public static void main(String[] args) throws IOException {
		ServerSocket ss = new ServerSocket(30000);
		while (true) {
			// 此行代码会阻塞,将一直等待别人的连接
			Socket s = ss.accept();
			socketList.add(s);
			// 每当客户端连接后启动一条ServerThread线程为该客户端服务
			new Thread(new ServerThread(s)).start();
		}
	}
}
以上代码没有将处理通信的Thread代码贴出来,因为很简单,只是启动一个线程去根据拿到Socket得到对应的输入输出流去读写内容,没有什么特殊的地方就不再贴出,参考了李刚<疯狂讲义>中的Socket通信demo.

要实现两台Android手机之间的WiFi热点通信,可以使用Android提供的Socket API和WifiManager API。 以下是基本步骤: 1. 创建WiFi热点 在一个手机上打开WiFi热点。您可以通过使用WifiManager类中的setWifiApEnabled()方法来创建WiFi热点。例如: ``` WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiConfiguration wifiConfig = new WifiConfiguration(); wifiConfig.SSID = "MyWifiHotspot"; wifiConfig.preSharedKey = "password"; wifiConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN); wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA); wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); Method setWifiApMethod = wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class); setWifiApMethod.invoke(wifiManager, wifiConfig, true); ``` 2. 连接WiFi热点 在另一个手机连接WiFi热点。您可以使用WifiManager类中的addNetwork()、enableNetwork()和reconnect()方法来连接WiFi热点。例如: ``` WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiConfiguration wifiConfig = new WifiConfiguration(); wifiConfig.SSID = "MyWifiHotspot"; wifiConfig.preSharedKey = "password"; wifiConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN); wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA); wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); int networkId = wifiManager.addNetwork(wifiConfig); wifiManager.disconnect(); wifiManager.enableNetwork(networkId, true); wifiManager.reconnect(); ``` 3. 创建Socket连接 使用Socket API在两个手机之间创建Socket连接。在一个手机上作为服务器,另一个手机作为客户端。例如: 在服务器端: ``` ServerSocket serverSocket = new ServerSocket(8888); Socket socket = serverSocket.accept(); ``` 在客户端: ``` Socket socket = new Socket(serverIpAddress, 8888); ``` 4. 通过Socket传输数据 在Socket连接建立后,可以使用输入流和输出流来传输数据。在服务器端和客户端都需要使用输入流和输出流。例如: 在服务器端: ``` DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream()); dataOutputStream.writeUTF("Hello from server"); dataOutputStream.flush(); DataInputStream dataInputStream = new DataInputStream(socket.getInputStream()); String message = dataInputStream.readUTF(); ``` 在客户端: ``` DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream()); dataOutputStream.writeUTF("Hello from client"); dataOutputStream.flush(); DataInputStream dataInputStream = new DataInputStream(socket.getInputStream()); String message = dataInputStream.readUTF(); ``` 以上就是Android两台手机之间通过WiFi热点通信的基本步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值