关于socket的问题,求大神解释一下以上代码,本人小白不太懂

问题描述

关于socket的问题,求大神解释一下以上代码,本人小白不太懂

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.nio.charset.Charset;
import java.util.List;
import java.util.Timer;
/*import com.lightingcontroller.Zigbee.ZigbeeScene;*/

import android.os.Handler;
import android.util.Log;

public class ZigbeeSrpcClient {

static Thread thread;
static Socket kkSocket;
static OutputStream outStream;
static InputStream inStream;

private static String gatewayIp= "192.168.1.111";//这个是什么?改了有问题吗?
static public String gatewayPort= "11235"; //"2be3";这个端口号我没有在服务器端发现

//SRPC头位的位置
private static final int SRPC_CMD_ID_POS = 0;
private static final int SRPC_CMD_LEN_POS = 1;

//SRPC CMD的ID
//定义外向RPSC命令ID的
private static final byte SRPC_NEW_DEVICE     = (byte) 0x0001;
private static final byte SRPC_RESERVED_1         = (byte) 0x0002;
private static final byte SRPC_RESERVED_2         = (byte) 0x0003;
private static final byte SRPC_RESERVED_3         = (byte) 0x0004;
private static final byte SRPC_RESERVED_4         = (byte) 0x0005;
private static final byte SRPC_RESERVED_5         = (byte) 0x0006;
private static final byte SRPC_GET_DEV_STATE_RSP  = (byte) 0x0007;
private static final byte SRPC_GET_DEV_LEVEL_RSP  = (byte) 0x0008;
private static final byte SRPC_GET_DEV_HUE_RSP    = (byte) 0x0009;
private static final byte SRPC_GET_DEV_SAT_RSP    = (byte) 0x000a;
private static final byte SRPC_ADD_GROUP_RSP      = (byte) 0x000b;
private static final byte SRPC_GET_GROUP_RSP      = (byte) 0x000c;
private static final byte SRPC_ADD_SCENE_RSP      = (byte) 0x000d;
private static final byte SRPC_GET_SCENE_RSP      = (byte) 0x000e;

//定义接收SRPC命令ID的
private static final byte SRPC_CLOSE              = (byte) 0x80;
private static final byte SRPC_GET_DEVICES        = (byte) 0x81;
private static final byte SRPC_SET_DEV_STATE      = (byte) 0x82;
private static final byte SRPC_SET_DEV_LEVEL      = (byte) 0x83;
private static final byte SRPC_SET_DEV_COLOR      = (byte) 0x84;
private static final byte SRPC_GET_DEV_STATE      = (byte) 0x85;
private static final byte SRPC_GET_DEV_LEVEL      = (byte) 0x86;
private static final byte SRPC_GET_DEV_HUE        = (byte) 0x87;
private static final byte SRPC_GET_DEV_SAT        = (byte) 0x88;
private static final byte SRPC_BIND_DEVICES       = (byte) 0x89;
private static final byte SRPC_RESERVED_6         = (byte) 0x8a;
private static final byte SRPC_RESERVED_7         = (byte) 0x8b;
private static final byte SRPC_RESERVED_8         = (byte) 0x8c;
private static final byte SRPC_RESERVED_9         = (byte) 0x8d;
private static final byte SRPC_GET_GROUPS         = (byte) 0x8e;
private static final byte SRPC_ADD_GROUP          = (byte) 0x8f;
private static final byte SRPC_GET_SCENES         = (byte) 0x90;
private static final byte SRPC_STORE_SCENE        = (byte) 0x91;
private static final byte SRPC_RECALL_SCENE       = (byte) 0x92;
private static final byte SRPC_IDENTIFY_DEVICE    = (byte) 0x93;
private static final byte SRPC_CHANGE_DEVICE_NAME = (byte) 0x94;
private static final byte SRPC_REMOVE_DEVICE      = (byte) 0x95;
private static final byte SRPC_OPEN_NETWORK       = (byte) 0x9c; 

private static final short JOIN_AUTH_NUM          = (short) 0xebd4;

//afaddr SRPC地址编号方式
public static final byte AddrNotPresent = 0;
public static final byte AddrGroup = 1;
public static final byte Addr16Bit = 2;
public static final byte Addr64Bit = 3;
public static final byte AddrBroadcast = 1;

public static final String PREFS_NAME = "MyPrefsFile";
private static Timer ResponseTimer;
private static Handler ResponseTimerHandler;

static byte[] srpcResponse;     

private static int rpcsProcessIncoming(byte[] msg, int msgPtr)
{
    int msgLen;     

    switch (msg[msgPtr + SRPC_CMD_ID_POS])
    {

    case SRPC_NEW_DEVICE:
    {
        int profileId=0, deviceId=0, nwkAddr=0;
        char endPoint;
        String deviceName = "";
        byte[] ieee = new byte[8];
        byte newDevFlag;

        msgLen = msg[msgPtr + SRPC_CMD_LEN_POS] + 2;
        //index passed len and cmd ID
        msgPtr+=2;

        //得到网络地址
        for (int i=0; i < 2; i++, msgPtr++)
        {
            //java不支持无符号的,所以使用更大的容器来避免转换问题
            int nwkAddrTemp = (msg[msgPtr] & 0xff);
            nwkAddr += (nwkAddrTemp << (8 * i));
        }           

        //得到 EndPoint
        endPoint = (char) msg[msgPtr++];

        //得到一个ProfileID
        for (int i=0; i < 2; i++, msgPtr++)
        {
            //java不支持无符号的,所以使用更大的容器来避免转换问题
            int profileIdTemp = (msg[msgPtr] & 0xff);
            profileId += (profileIdTemp << (8 * i));
        }   

        //得到 DeviceId
        for (int i=0; i < 2; i++, msgPtr++)
        {
            //java不支持无符号的,所以使用更大的容器来避免转换问题
            int deviceIdTemp = (msg[msgPtr] & 0xff);
            deviceId += (deviceIdTemp << (8 * i));
        }               

        //指数通过的版本
        msgPtr++;

        int nameSize = msg[msgPtr++];
        for(int i = 0; i < nameSize; i++)
        {
            deviceName += (char) msg[msgPtr++];
        }           

        //指数传递状态
        msgPtr++;

        //复制 IEEE Addr
        for(int i = 0; i < 8; i++)
        {
            ieee[i] = msg[msgPtr++];
        }           

        newDevFlag = msg[msgPtr++];

        ZigbeeAssistant.newDevice(profileId, deviceId, nwkAddr, endPoint, ieee, deviceName, newDevFlag);

        break;
    }

求大神解释一下以上代码,本人小白不太懂

解决方案

你这段是客户端的代码,gatewayIp这个是指定的服务器端地址,是部署了你的Server端代码的机器的IP,可以改但是必须也部署了服务器端代码。
gatewayPort这个端口是服务器端的监听端口,服务器端肯定是ServerSocket的监听端口。
定义的一系列常量都是用来通信的,服务器端根据这些类型来处理相应的请求的。

时间: 2024-08-04 21:17:57

关于socket的问题,求大神解释一下以上代码,本人小白不太懂的相关文章

c++-求大神解释这段代码,是什么意思!

问题描述 求大神解释这段代码,是什么意思! __field_bcount(cbData) PVOID lpData; 解决方案 这是一个宏, #define __field_bcount ( size ) __notnull __byte_writableTo(size) __field_bcount(cbData) PVOID lpData; //指向用户定义数据的指针} 解决方案二: 如果不看前半部分,PVOID lpData;是最简单的一个 VOID 型指针的定义语句.然后就是搞清楚 __

需求-求大神解释一下在C#中都有哪种类型可以定义数组?

问题描述 求大神解释一下在C#中都有哪种类型可以定义数组? 小弟知道数组可以被基础数据类型(如int.string.char等)和类类型进行定义.但是不知道其他的引用类型和值类型中是否还有其他类型可以定义数组呢?求大神解答一下,不是需求,只想得到一个解答. 解决方案 除了基本值类型外,其余的都是引用类型. 所以,应该可以建立数组. 不过还是实践出真知,想知道可不可以就写一个demo测试一下喽,说不定会有一些想不到的问题出现. 解决方案二: 中山大学南方学院优才班实训基地陆盈教育IT职业优才计划千

vs2012配置opencv后,函数报错,求大神解释

问题描述 vs2012配置opencv后,函数报错,求大神解释 我在配置好opencv2.4.10之后,找了个程序测试一下,但是程序中所有的opencv库中的函数都报错,说是为定义的标示符,但是opencv的库函数我已经链接输入了.搞了好久,求大神解答额 解决方案 opencv的lib库是否也用vs2012编译的,其次,link的时候路径等是否设置争取

数据结构程序求大神解释

问题描述 数据结构程序求大神解释 (*H).data[i].key=-1;(*H).data[i].hi=0;}for(i=0;i<n;i++) 解决方案 只有3行.只能看出是设置一个结构体中的两个字段,下面是一个不完整的循环 解决方案二: 你准是没有贴全代码.....

链表-一段输出两个list不同之处的代码,求大神解释

问题描述 一段输出两个list不同之处的代码,求大神解释 为什么代码中既有head,也有tail,他们两个是什么关系,各起到什么作用?求大神解释 Lnode * difference( Lnode *list1, Lnode *list2 ) { Lnode *head = NULL; Lnode *tail = NULL; Lnode *new_node; Lnode *copy_node; // walk through both lists, adding nodes as necessa

激活码-关于windows激活密钥。求大神解释。

问题描述 关于windows激活密钥.求大神解释. 我装了win10专业版,买了Retail通道的激活密钥激活了win10,可是为什么我用我的密钥还可以激活别人的win10,Retail密钥不是只能激活一台电脑吗?哪位可以解释一下. 解决方案 你在哪里买的.我的msdn零售密钥每个可以激活10个计算机.但是如果你买的是真正的零售密钥,只能激活1台计算机.激活另一台,会提示这个密钥已经在别的计算机上激活过. 如果你买的是msdn的密钥,理论上属于盗版,msdn只能用于开发测试和评估. 解决方案二:

求大神解释c++关于ostream和ofstream的问题

问题描述 求大神解释c++关于ostream和ofstream的问题 无奈上课听不太懂,还请大神把这张ppt讲的详细一点,不胜感激! 主要是想问一下(1)ostream ofile = 0是什么意思?为什么是不是&,,如果default是0那么<<endl要怎么办,,还有这和debug有什么关系(debug不是调试的意思吗)(2)最后那个问题Could we use ofstream &ofile = 0 可不可以? 解决方案 在非调试的情况下,ofile=0,此时不会输出到文

贪心-关于HDU 1045题,一直wa,求大神解释

问题描述 关于HDU 1045题,一直wa,求大神解释 http://acm.hdu.edu.cn/showproblem.php?pid=1045 自己试了是对的,没错,可是就是WA #include<stdio.h> int main() { int huanjilu[10][10]; char map[10][10]; int juzhen,num; while(scanf("%d",&juzhen)) { int ju; if(juzhen==0)break

helloworld-为生么这个程序几个编译程序都无法显示呀??求大神解释下!!

问题描述 为生么这个程序几个编译程序都无法显示呀??求大神解释下!! public class HelloWorld{ public static void main(String[] args) { int num = 999; int count = 0; for(;(num/10)>1; count++) { ; } System.out.print("它是个"+count+"位的数"); } } 解决方案 for(;(num/10)>1; cou