一 : jni在c中的例子
char *jbyteArrayToChar(JNIEnv *env, jbyteArraybytes)jstring stoJstring(JNIEnv* env, const char* pat)
{
jclass strClass =env->FindClass("Ljava/lang/String;");
jmethodID ctorID =env->GetMethodID(strClass,"<init>","([BLjava/lang/String;)V");
jbyteArray bytes =env->NewByteArray(strlen(pat));
env->SetByteArrayRegion(bytes, 0,strlen(pat), (jbyte*)pat);
jstring encoding =env->NewStringUTF("utf-8");
return(jstring)env->NewObject(strClass, ctorID, bytes,encoding);
}
char* jstringTostring(JNIEnv* env, jstring jstr)
{
char* rtn = NULL;
jclass clsstring =env->FindClass("java/lang/String");
jstring strencode =env->NewStringUTF("utf-8");
jmethodID mid =env->GetMethodID(clsstring, "getBytes","(Ljava/lang/String;)[B");
jbyteArray barr=(jbyteArray)env->CallObjectMethod(jstr, mid,strencode);
jsize alen =env->GetArrayLength(barr);
jbyte* ba =env->GetByteArrayElements(barr, JNI_FALSE);
if (alen > 0)
{
rtn = (char*)malloc(alen +1);
memcpy(rtn, ba, alen);
rtn[alen] = 0;
}
env->ReleaseByteArrayElements(barr,ba, 0);
return rtn;
}
JNIEXPORT void JNICALL Java_cn_itcast_Test_Info_1in(JNIEnv *env,jobject obj, jbyteArray buf, jint len)
{
char *CBuf=jbyteArrayToChar(env,buf);
int MyLen=len;
unsigned charuBuf[1024];
memset(uBuf,0,sizeof(uBuf));
memcpy(uBuf,CBuf,strlen(CBuf)+1);
ydt_info_in(uBuf,&MyLen);
CBuf=(char*)uBuf;
jfieldIDj_len=env->GetFieldID(env->GetObjectClass(obj),"MyLen","I");
env->SetIntField(obj,j_len,MyLen);
jfieldIDj_arr=env->GetFieldID(env->GetObjectClass(obj),"MyArr","Ljava/lang/String;");
jstringMyString=stoJstring(env,CBuf);
env->SetObjectField(obj,j_arr,MyString);
}
JNIEXPORT void JNICALL Java_cn_itcast_Test_Info_1out(JNIEnv*env, jobject obj, jstring buf, jint len)
{
char *MyBuf=jstringTostring(env,buf);
int MyLen=len;
ydt_info_out(MyBuf,&MyLen);
jfieldIDj_len=env->GetFieldID(env->GetObjectClass(obj),"MyLen","I");
env->SetIntField(obj,j_len,MyLen);
jfieldIDj_arr=env->GetFieldID(env->GetObjectClass(obj),"MyArr","Ljava/lang/String;");
jstring MyString=stoJstring(env,MyBuf);
env->SetObjectField(obj,j_arr,MyString);
}
二 : LWIP程序OPT.h头文件的各种定义
由于英文基础太差,很多东西都看不懂,所以一面对照着百度翻译,一面去查百度,lwip中opt头文件基本上是lwip的一个基础选项的设置,里面包括了很多东西,如果arp,icmp,udp,ip,tcp的协议使能和设置还有一些其他的设置,在不知情的情况下,查这个文件,会有助于你对程序设置的理解。
后面的很多中文是由百度翻译而来,所以非常不准确,欢迎批评指正。
SYS_LIGHTWEIGHT_PROT 平台锁,保护关键区域内缓存的分配与释放
NO_SYS --- 是否带操作系统, =1时带,=0时,不带
MEMCPY(dst,src,len) --- 内存拷贝 若你希望自己写拷贝函数则可替换
SMEMCPY(dst,src,len) ---内存拷贝 若你希望自己写拷贝函数则可替换
MEM_LIBC_MALLOC --- 内存函数库的使用,=1时使用c库 =0时使用自己的库
MEMP_MEM_MALLOC --- = 1时,使用mem_malloc/mem_free代替分配池
MEM_ALIGNMENT --- 字节对齐 = 1时应该是2字节对齐
MEM_SIZE --- 堆内存大小 若发送内容很多,则应设置很高
MEMP_OVERFLOW_CHECK --- 溢出保护为0时关闭,可以有1和2,2比较慢
MEMP_SANITY_CHECK --- 链检查,每次free后检查列表是否有循环
MEM_USE_POOLS --- 自定义内存池
MEM_USE_POOLS_TRY_BIGGER_POOL--- 内存池增大,增加系统可靠性
MEMP_USE_CUSTOM_POOLS --- 使用自定义内存池与lwippools.h有关
LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT --- 其他上下文释放内存
MEMP_NUM_PBUF --- RAW协议控制块数量
MEMP_NUM_UDP_PCB --- UDP协议控制块的数量
MEMP_NUM_TCP_PCB --- TCP协议控制块的数量
MEMP_NUM_TCP_PCB_LISTEN ---TCP监听连接数
MEMP_NUM_TCP_SEG --- TCP排队数量
MEMP_NUM_REASSDATA --- IP数据包排队数量
MEMP_NUM_ARP_QUEUE --- arp队列数
MEMP_NUM_IGMP_GROUP --- 组播网络接口数
MEMP_NUM_SYS_TIMEOUT --- 系统超时设置
MEMP_NUM_NETBUF --- netbuf结构数
MEMP_NUM_NETCONN --- netconn结构数
MEMP_NUM_TCPIP_MSG_API --- tcpip消息数
MEMP_NUM_TCPIP_MSG_INPKT --- tcpip数据包相关设置
PBUF_POOL_SIZE --- pbuf池大小
LWIP_ARP ---功能开启关闭
ARP_TABLE_SIZE --- ip地址缓冲对数量
ARP_QUEUEING --- arp队列
ETHARP_TRUST_IP_MAC ---arp ip mac先关
IP_FORWARD --- ip包转发
IP_OPTIONS_ALLOWED ---ip选项允许
IP_REASSEMBLY --- IP断点续传
IP_FRAG --- IP断点发送
IP_REASS_MAXAGE --- 分段数据包最大时间
IP_REASS_MAX_PBUFS --- 分段组装条数
IP_FRAG_USES_STATIC_BUF --- 使能静态缓冲区
IP_FRAG_MAX_MTU ---IP最大缓冲数量
IP_DEFAULT_TTL --- IP最大ttl时间
IP_SOF_BROADCAST --- ip sof广播
IP_SOF_BROADCAST_RECV --- spf广播过滤
LWIP_ICMP --- ICMP使能
ICMP_TTL --- ICMP最大ttl时间
LWIP_BROADCAST_PING --- 是否响应广播ping
LWIP_MULTICAST_PING --- 是否响应组播ping
LWIP_RAW ---raw协议使能
RAW_TTL --- raw ttl时间
LWIP_DHCP --- DHCP使能
DHCP_DOES_ARP_CHECK --- arp地址检查
LWIP_AUTOIP --- 自动ip使能
LWIP_DHCP_AUTOIP_COOP --- dhcp 自动ip接口
WIP_DHCP_AUTOIP_COOP_TRIES --- dhcp发现数
LWIP_SNMP --- snmp使能
SNMP_CONCURRENT_REQUESTS ---snmp并发数
SNMP_TRAP_DESTINATIONS --- snmp 陷阱相关
SNMP_PRIVATE_MIB --- snmp 私用mib
SNMP_SAFE_REQUESTS --- snmp安全相关
LWIP_IGMP --- IGMP设置
LWIP_DNS --- DNS使能
DNS_TABLE_SIZE --- dns最大记录数
DNS_MAX_NAME_LENGTH --- dns主机名最大长度
DNS_MAX_SERVERS --- 最大dns服务数
DNS_DOES_NAME_CHECK --- dns 响应校验
DNS_USES_STATIC_BUF --- dns本地缓存数
DNS_MSG_SIZE --- dns消息大小
DNS_LOCAL_HOSTLIST --- dns 主机列表
DNS_LOCAL_HOSTLIST_IS_DYNAMIC --- dns动态列表
LWIP_UDP --- udp使能
LWIP_UDPLITE --- udp数据报
UDP_TTL --- udp ttl时间
LWIP_TCP --- TCP 使能
TCP_TTL --- TCP TTL时间
TCP_WND --- TCP窗口长度
TCP_MAXRTX --- TCP最大重传次数
TCP_SYNMAXRTX --- TCP syn段最大重传次数
TCP_QUEUE_OOSEQ --- TCP队列到达顺序 应该是排序相关
TCP_MSS --- TCP最大段大小
TCP_CALCULATE_EFF_SEND_MSS --- 用于限制mms
TCP_SND_BUF --- TCP发送缓冲空间(字节)
TCP_SND_QUEUELEN ---TCP发送缓冲空间(pbufs)
TCP_SNDLOWAT --- TCP写空间(字节)
TCP_LISTEN_BACKLOG --- 启用TCP积压选择听协议控制块
TCP_DEFAULT_LISTEN_BACKLOG --- 允许最大协议控制块监听数
LWIP_TCP_TIMESTAMPS ---支持TCP时间戳选项
TCP_WND_UPDATE_THRESHOLD --- 窗口更新与触发
LWIP_EVENT_API LWIP_CALLBACK_API --- 只有一个为1 由系统控制或有回调函数控制
PBUF_LINK_HLEN --- 链路层头
PBUF_POOL_BUFSIZE --- pbuf池大小
LWIP_NETIF_HOSTNAME --- 使用dhcp_option_hostname用netif的主机名
lwip_netif_api --- 是否支持netif API,1为支持
LWIP_NETIF_STATUS_CALLBACK --- 回调函数支持接口
lwip_netif_link_callback --- 链路故障相关
lwip_netif_hwaddrhint --- 缓存链路层地址的提示
lwip_netif_loopback --- 支持发送数据包的目的地IP
lwip_loopback_max_pbufs --- 在队列的最大数量的pbufs回送
LWIP_NETIF_LOOPBACK_MULTITHREADING --- 是否启用多线程
LWIP_NETIF_TX_SINGLE_PBUF --- 单一Pbuf发送
LWIP_HAVE_LOOPIF --- 支持回送地址(127.0.0.1) and loopif.c
LWIP_HAVE_SLIPIF --- 支持滑动界面和slipif C
TCPIP_THREAD_NAME --- 分配给主要的TCPIP线程的名称
扩展:lwip opt.h / stm32 lwip宏定义 / lwip udp client程序
tcpip_thread_stacksize --- 由主线程使用TCPIP栈大小
TCPIP_THREAD_PRIO --- 分配给主要的TCPIP线程优先级
tcpip_mbox_size --- 用于tcpip线程消息邮箱大小
SLIPIF_THREAD_NAME --- SLIPIF 线程名
SLIPIF_THREAD_STACKSIZE --- 分配给slipif_loop线程优先级
PPP_THREAD_NAME --- PPP协议线程名称
PPP_THREAD_STACKSIZE --- 由pppmain线程使用的堆栈大小
ppp_thread_prio --- 分配给pppmain线程优先级
DEFAULT_THREAD_NAME --- 默认LWIP线程名
DEFAULT_THREAD_STACKSIZE --- 缺省堆栈大小
default_thread_prio --- 分配给任何其他LwIP线程优先级
default_raw_recvmbox_size --- 其他raw邮箱大小
DEFAULT_UDP_RECVMBOX_SIZE --- 其他udp邮箱大小
DEFAULT_TCP_RECVMBOX_SIZE --- 其他tcp邮箱大小
DEFAULT_ACCEPTMBOX_SIZE --- ACCEPTMBOX大小
lwip_tcpip_core_locking --- (实验!)平时不用
lwip_netconn --- 使能netconn API(需要使用api_lib。C)
lwip_socket --- 使Socket API (需要sockets.c)
lwip_compat_sockets --- BSD套接字函数名称
lwip_posix_sockets_io_names ---使POSIX风格的套接字函数名称posix系统
LWIP_TCP_KEEPALIVE --- 死链检测
LWIP_SO_RCVBUF ---使能阻塞处理程序
RECV_BUFSIZE_DEFAULT --- 若使能阻塞处理,则该设置为阻塞缓冲大小
SO_REUSE --- 重发送
lwip_stats --- 使能lwip_stats统计
LWIP_STATS_DISPLAY --- 编译输出统计功能
LINK_STATS --- 使能连接统计
ETHARP_STATS --- 使能arp统计
IP_STATS --- 使能ip统计
IPFRAG_STATS --- ip碎片统计
ICMP_STATS --- icmp统计
IGMP_STATS ---igmp统计
UDP_STATS --- udp统计
TCP_STATS --- tcp统计
MEM_STATS ---内存管理统计
MEMP_STATS --- 内存链表统计
SYS_STATS --- 系统统计
PPP_SUPPORT --- 使能ppp协议
PPPOE_SUPPORT --- 使能pppoe协议
PPPOS_SUPPORT --- 使能pppos协议
NUM_PPP --- 最大ppp会话
PAP_SUPPORT --- 使能pap密码认证协议
CHAP_SUPPORT--- 使能chap协议
MSCHAP_SUPPORT --- 使能mschap目前不支持,不设置
CBCP_SUPPORT --- 使能CBCP 目前不支持,不设置
CCP_SUPPORT --- 使能ccp 目前不支持,不设置
VJ_SUPPORT --- 使能 支持该报头压缩
md5_support --- 支持MD5
FSM_DEFTIMEOUT --- 贞退出时间
FSM_DEFMAXTERMREQS --- 最大终止请求传输
FSM_DEFMAXCONFREQS --- 最大配置请求传输
FSM_DEFMAXNAKLOOPS --- NAK环的最大数量
UPAP_DEFTIMEOUT --- 重发请求超时(秒)
UPAP_DEFREQTIME --- 时间等待认证请求同行
CHAP_DEFTIMEOUT --- chap默认退出时间
CHAP_DEFTRANSMITS --- 竞争最大发送时间
LCP_ECHOINTERVAL --- KeepAlive回送请求之间间隔,0秒为禁用
LCP_MAXECHOFAILS --- 故障之前悬而未决的回声请求数
PPP_MAXIDLEFLAG --- 最大发射空闲时间(在经过前发送标志字符)
CHECKSUM_GEN_IP --- 生成ip包校验
CHECKSUM_GEN_UDP --- 生成udp包校验
CHECKSUM_GEN_TCP --- 生成tcp包校验
CHECKSUM_CHECK_IP ---传入ip包校验
CHECKSUM_CHECK_UDP ---传入udp包校验
CHECKSUM_CHECK_TCP --- 传入tcp包校验
以下是各种调试
LWIP_DBG_MIN_LEVEL
LWIP_DBG_TYPES_ON
ETHARP_DEBUG
NETIF_DEBUG
PBUF_DEBUG
API_LIB_DEBUG
API_MSG_DEBUG
SOCKETS_DEBUG
ICMP_DEBUG
IGMP_DEBUG
INET_DEBUG
IP_DEBUG
IP_REASS_DEBUG
RAW_DEBUG
MEM_DEBUG
MEMP_DEBUG
SYS_DEBUG
TCP_DEBUG
TCP_INPUT_DEBUG
TCP_FR_DEBUG
TCP_RTO_DEBUG
TCP_CWND_DEBUG
TCP_WND_DEBUG
TCP_OUTPUT_DEBUG
TCP_RST_DEBUG
TCP_QLEN_DEBUG
UDP_DEBUG
TCPIP_DEBUG
PPP_DEBUG
SLIP_DEBUG
DHCP_DEBUG
AUTOIP_DEBUG
SNMP_MSG_DEBUG
SNMP_MIB_DEBUG
DNS_DEBUG
扩展:lwip opt.h / stm32 lwip宏定义 / lwip udp client程序
三 : C# GDI 绘制自定义控件
今天用GDI+绘制一个渐变的Panel,窗体移到有的被遮盖处,比如说开始菜单以下,再移上来,就出现如图61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1