不知不觉做安卓已经快两年了,主要接触的底层硬件之间的传输会多点,WIFI 我们用的是有人公司的,话不多说socket,长连接方式,代码走起:这边做的是客户端,首先得拿到服务端的IP和端口号。
private static DataOutputStream dos = null;
private static DataInputStream dis = null;
private static InetAddress serverAddr;
private Socket socket;
ok,在onCreate里面写链接操作了,一般主线程UI不做耗时操作,那么久new一个子线程。
new Thread(new Runnable() {
// @Override
public void run() {
{
try {
System.out.println("服务器qidong...");
serverAddr = InetAddress.getByName("192.168.1.102");//这边上服务器的地址
socket = new Socket(serverAddr, 8899); //服务器的端口
System.out.println("服务器已启动...");
handler.obtainMessage(0x07).sendToTarget();
// receive();//接收函数
// Log.v("socket", "dealException: " + "success");
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
到这边我们就建立和服务器的socket链接了,下面接收两个重要的:发送和接收
首先发送;
这边做的是发送的16进制字节,也可以定义成字符串 dos.writeBytes(str);这个可以按照项目选择。
byte[] ledclose = {0x7b,0x11,0x7d};//关
try {
dos =new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
dos.write(ledclose);//写入
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
dos.flush();//释放
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
下面就是接收是数据处理,这边也做个子线程处理接收服务器发送过来的数据。
new Thread() {
@Override
public void run() {
// 执行完毕后给handler发送一个空消息
try {
if (socket != null && socket.isConnected()) {//判断是否链接
dis =new DataInputStream(socket.getInputStream()); //输入流
while(strar)//strar为true
{
byte[] buf = new byte[1024*4]; //这边没有做缓存,一般拿取到的数据还是做下拼接(缓存),防止拿到的数据不完整
int length = dis.read(buf);
if(length>0){
for(int i=0;i<length;i++){
if((buf[i]==0x7B)&&(buf[i+3]==0x7B)){
if(buf[i+1]==0x0C){
// int cod=Integer.parseInt(buf[i+2]+"",10);
datastr1=String.format("%d",buf[i+2]);//wendu
}
}
}
}
}
}
dis.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
哦哦,下班了,写的有点草率,但是基本就这些,蓝牙链接也差不多,多了个地址,下次有机会再写,如有问题望见谅
最后权限也要加一下,不然会报错的,
<uses-permission android:name="android.permission.INTERNET" />