前几章中讲到了使用手机的热点建立局域网,下面就简单讲下如何通过手机热点建立的局域网与连接到此热点的其它设备(手机或者电脑)通信,在不需要访问外网的情况下,只要连接到手机热点的所有设备间都可以通信,就看程序支持不支持了.
第一步:创建一个热点,利用前几章博客的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.