hr开发小结

时间:2019-05-13 16:44:29下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《hr开发小结》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《hr开发小结》。

第一篇:hr开发小结

HR信息类型增强

信息类型是SAP HR模块数据单元,用于对人员数据的记录和维护,是HR的基础。信息类型按照其创建方式的不同可以分为:人事信息类型、组织信息类型。信息类型数据的维护主要在事物码PA30、PA40、po10、P013 中进行。信息类型的创建

信息类型的创建涉及到的两个事务码:PM01,PPCI。分别对应人事主数据与组织、职位主数据的增强。

人事信息类型在生成时,系统会自动生成2000、1000、3000等屏幕,以及相应的类,和PR模块。其中2000屏幕是我们在PA30中(对人事信息类型来说)编辑或查看时看到的屏幕,一般做好信息类型增强后需要对2000屏进行修改,像设置下拉框、设置单选按钮组、制作树型结构F4等;3000屏为列表屏幕,是我们点击概览时所看到的屏幕。PR模块用于信息类型的显示(具体的我也不清楚)。

组织信息或职位信息类型,有时需要创建7000屏,也就是我们常见的PPOSE屏,这个屏幕可以在生成信息类型时直接在PPCI里生成(点击菜单栏中,信息类型—创建子屏幕 即可,当然逻辑流要与2000屏的逻辑流保持一致)。人事信息类型的创建 创建信息类型

HR本身提供一些常用的信息类型,但当有特殊的需求时需要进行信息类型的创建。自己创建的信息类型编码是以„9‟开头的四位数字,其他数字开头的信息类型为系统自带的。像9025、9195、9135等。创建步骤如下(以9001为例):TCODE PM01 PM01——》创建IT——》输入9001——》选择PS结构——》编辑,进入ps9001编辑界面。维护后点击 ;

信息类型增强时,需要创建一个结构,用于说明该信息类型有哪些字段,结构的名称格式为:”PS+信息类型”。实例结构如下: 保存,激活后返回PM01界面,点击生成对象,同前。维护信息类型特征:

系统会按照你提供的字段生成2000屏、3000屏;其中2000屏为我们在PA30中进行维护(查看)时展现出的屏幕,3000屏即列表屏,当我们选择概览时的所看到屏幕。

详细设置如下:(我们可以通过SM30维护V_T582A中信息从而实现对信息类型的属性的维护)

维护完保存,进入PA30,效果如下:

信息类型自动生成完成。由于屏幕是自动生成,屏幕中的所有字段均由结构中的字段生成。所以需要对屏幕进行修改。(像:屏幕字段描述的修改、F4帮助、下拉列表等)增强单个屏幕 当某些信息类型的字段不能满足当前的业务需求时,需要对这个信息类型进行增强。单个屏幕增强的步骤如下(以信息类型0529为例)。PM01——》单个屏——》信息类型号0529——》客户包含——》编辑,这时进入CI_P0529结构的创建。

CI_0529结构中的字段即为需要在屏幕中增强的附加字段。CI_0529结构如下:

创建完成后,保存,激活,回到PM01初始界面,点击生成对象,这时系统会给出一系列提示消息框,不要理会,点确定直到不出现。这时相关的屏幕、结构、表都已经创建完毕,但要在前台界面显示出来还需做一定的设置。

PM01——》分配增强——》新条目。

维护好之后,保存,退出,现在可在事务码PA30里看到效果了。注: 屏幕自动生成的字段的输入/输出以及可修改性是可以在屏幕修正(v_t588m/t588m)里进行设置。组织职位信息类型的创建 创建信息类型

组织信息信类型的创建TCODE为:PPCI 信息类型以9开头,最好与人事的信息类型编码区分开。

首先要创建HRIXXXX结构。SE11 根据业务字段进行HRI结构的创建.(在创建组织信息类型时要,收集好需求,避免遗漏字段。组织信息类型后期删除比较麻烦。)创建信息类型 PPCI 进行检查 生成信息类型

维护信息类型视图(SM30 —— T777I),维护时间限制和信息类型类型 组织职位中子屏幕(7000)屏幕的创建

进入PPCI,填写信息类型,点击创建,点击菜单栏中的“信息类型”,选择“创建子屏幕”。

创建完子屏幕后,对新生成屏幕的逻辑流及屏幕进行修改。HR出口(CMOD)增强 HR出口增强中常用的 方法有:

1、cl_hr_pnnnn_type_cast=>prelp_to_pnnnn “ 获取数据

2、cl_hr_pnnnn_type_cast=>pnnnn_to_prelp “写入数据 HR中常用的BADI

1、HRBAS00INFTY “ 作用于 OM

2、HRPAD00INFTY “ 作用于 PA 原始字段描述修改增强

1、CMOD HR程序开发

HR程序开发如其他模块开发有些不同。主要是因为HR模块中引入了信息类型、逻辑数据库和宏。2.1 逻辑数据库

HR中常用的逻辑数据库为:PNP、PCH、PNPCE、PAP,其中PNP及PCH用的最多。PNP 用于获取人员信息,PCH用于获取组织信息。2.2 Provide PROVIDE常用于HR的取数中。

一般provide和end provide用于处理时间限制是1和2的infotype.会一笔一笔的循环该infotype.provide endprovide 会将符合条件的记录进行分段,因此会改变pnnnn-begda 或 pnnnn-endda 的值,使用时要注意。2.3 HR报表常用的宏

1、rp_provide_from_last 用于获取信息类型中的最新的一笔数据

2、rp_provide_from_frst 用法与rp_provide_from_last 相同,用于获取信息类型中的第一笔数据 与HR相关的FM

1、RH_STRUC_GET 用于获取组织单元下的职位及人员信息

2、CU_READ_RGDIR 薪资报表中用于获取期间

3、PYXX_READ_PAYROLL_RESULT 根据索引号得到工资数 一般与CU_READ_RGDIR一起用

4、RP_LAST_DAY_OF_MONTHS 获取一个月的最后一天

5、HR_GET_TIME_BETWEEN_DATES 获取日期 年月差

6、RH_OBJID_REQUEST 获取组织对象

7、HR_HCP_READ_OBJECT_TEXT 获取对象文本

8、RP_HIRE_FIRE 获取0041中的日期

9、HR_AUPBS_AGE 计算员工年龄

第二篇:HR培训与开发

案例

1、国内某公司与英国某大学签订了一项培训协议,每年选派2-3名管理人员到该学校攻读管理硕士学位。学业完成后,员工必须回公司服务5年,服务期满方可调离。2002年5月,销售部助理小张经过公司几轮挑选,终于与其他两位同事一起获得了推荐。但小张早有预谋,在此之前已获取了英国另一所学院管理硕士的录取通知书。虽然该校的学费较高,但其声誉好,教学质量高,还能帮助学生申请到数额可观的助学贷款。经过公司人事部的同意,小张用公司提供的奖学金交了学费,又申请了3万美金的助学贷款,以解决和妻子在英国的生活费。按照目前小张的收入水平,需要8年时间才能还清贷款,如果他在一家外资公司工作,不到4年便可还清贷款。行期将近,公司人事部多次催促与其签订培训合同书,一直到离开公司的前一天小张才在协议书上签了字。

2003年9月末,小张学成回国,并马上回公司报到。不过,10月初,他便向公司人事部递交了辞呈,并按合同还清了公司为其支付的英语培训考试费、赴英签证费、学费等一切费用。不久,他便在一家美国大公司得到一个年收入20万以上的职位。

根据本案例,请回答下列问题:

⑴该公司在选派员工出国培训的工作中主要存在哪些问题?

⑵该公司采取哪些措施才能确立更有效的培训体系,防止此类的事件发生?

解析:

⑴该公司在组织员工出国培训方面主要存在的问题:

①未进行必要的培训需求分析,选派员工出国培训的目的不明确。

②未选择适宜的培训方式,应当根据具体的培训目的和要求,选择投入较少,收益较大的培训方式,对员工进行有针对性培训。

③没有确立有效的人才选拔机制,象出国培训这样高投入具有一定风险的培训项目,为了提高培训效果,应当选派那些具有很高忠诚度和很强事业心的员工作为培养对象。

④没有建立规避培训风险机制,如培训合同管理不够健全完善,协议书约定条款缺乏合理性,对违约责任没有明确的规定。

⑵可以采取的措施:

①建立培训需求分析系统,明确公司培训目标,制定公司的中长期培训规划。②确立公司培训评估系统,选择适合的培训方式方法,提高培训效果。

③完善各类培对象的选拔机制,注重对后备人才的甄靠选,确保人才选拔的可靠性 ④建立培训风险防范机制,完善培训合同管理,运用多种手段制止违约行为。

⑤采取多种渠道、手段和方法有效激励员工,避免优秀人才的流失,如加强企业文化建设,与员工之间确立遵守承诺的互信机制,构建公正公平的薪酬福利制度,等等。

第三篇:PAYPAL IPN开发小结

PayPal支付接口IPN开发小结

1.IPN简介及其工作方式

PayPal IPN(Instant Payment Notification),就是Paypal开发的一种能主动通知第三方卖家系统交易状态的一种机制。IPN的原理很简单,就是当产生了一个交易之后,交易状态发生变化时,如用户已经付款、或者退款、撤销时,Paypal利用常用的HTTP POST方式,将交易的一些变量提交给网站的某个页面(称之为IPN Handler),当这个页面接受到请求时候,将这些数据原封不动加上一个指示验证的cmd=_notify-validate,POST回Paypal的接口地址,如果数据正确,那么Paypal返回字符串VERIFIED,否则为INVALID,如果结果为VERIFIED,那么你的程序就可以使用这些数据进行操作。

另外,IPN只针对PayPal的Business用户开放。

2.SANDBOX使用介绍

Paypal专门开发了Sandbox给开发人员进行开发,首先到https://developer.paypal.com/ 注册一个开发帐号,好了之后再进入Sandbox建立测试用的Paypal虚拟帐号(至少应该建立一个Business的和一个Personal的),这种账号注册方法和Paypal的流程一样,信息可以是假的,包括银行帐号、信用卡(其实Paypal Sandbox会自动生成一些随机的号码)。接下来需要激活Paypal Sandbox的虚拟帐号,注意,这里不管你在Paypal Sanbox注册时填什么邮件地址,有任何发送到虚拟帐号所填邮箱的邮件都存会在开发帐号的管理界面中的Email页(导航栏上有)中。登录Sandbox的虚拟Paypal环境,还需要验证虚拟帐号的银行,这里可以随便填,然后通过Add Funds来给账户充值(想填多少填多少)。然后,还需要激活IPN的选项,在Business的那个账户的Profile设置页面中,点击,然后点击Edit按钮,打开IPN,这里如果你使用的是固定的IPN Handle,可以直接将地址填入。

测试案例:

登录Business帐户,在Merchant Service中点击Buy Now Buttons生成一个PAY按钮的HTML代码; 在My Account中点击Profile,然后点击Instant Payment Notification Preferences设置IPN Handel;在Website Payment Preferences中可以设置PAY完成之后返回的页面;

在一个页面中嵌入PAY按钮代码,点击支付后IPN Handel就会收到PayPal POST过来的数据;

3.IPN Handel IPN Handel只需接收POST来的参数就可以了,下面列举一些重要的参数:

payment_status:显示交易的状态,有Completed, Pending, Failed等几种状态,一般买家通过PAY按钮付款之后处于Pending状态,确认付款之后处于Completed状态,放弃付款处于Failed状态

item_name:货物的名称 item_number:货物的编号 mc_gross:支付的金额

可以在http://paypaltech.com中找到IPN Handel的示例代码 下面截取一个IPN Handel的代码参考

<%@LANGUAGE=“VBScript”%> <% ' dim some variables Dim Item_name, Item_number, Payment_status, Payment_amount Dim Txn_id, Receiver_email, Payer_email Dim objHttp, str

'begin IPN handling ' read post from PayPal system and add 'cmd' str = Request.Form & “&cmd=_notify-validate” ' post back to PayPal system to validate set objHttp = Server.CreateObject(“Msxml2.ServerXMLHTTP”)' set objHttp = Server.CreateObject(“Msxml2.ServerXMLHTTP.4.0”)' set objHttp = Server.CreateObject(“Microsoft.XMLHTTP”)objHttp.open “POST”, “https://www.xiexiebang.com/cgi-bin/webscr”, false objHttp.setRequestHeader “Content-type”, “application/x-www.xiexiebang.completed”)then pay_status=1 ' completed else if(trim(payment_status)=“Pending”)then pay_status=0 ' pending else if(trim(payment_status=“Failed”))then pay_status=2 'failed else

pay_status=-1 ' unknown status end if end if end if

' order id order_id=trim(payment_date)response.Write(mc_gross&“fsafaffas”)money=CDbl(mc_gross)

'get account information set rsAccount = server.CreateObject(“ADODB.Recordset”)

sql = “select * from cleanpick_account where login_id = ” & login_id rsAccount.Open sql, objConn, 3, 1 if rsAccount.EOF then Pbalance = 0 'delete redundance objConn.execute(“delete from cleanpick_account where login_id=”&login_id)

'if we can not find the account information from database create one 'Default account's balance is 0 dollor sql=“insert into cleanpick_account(login_id, balance, description, searches, deals)values”_

& “(”&login_id&“,0,'New User', 0, 0)”

objConn.execute(sql)else Pbalance = rsAccount(“balance”)end if rsAccount.close()

if(pay_status=1)then Pbalance2 = Pbalance+money else Pbalance2 = Pbalance end if

if(pay_status<>-1)then 'delete redundancy sql=“DELETE FROM cleanpick_deposithistory where login_id=” & login_id & _

“ and deposit_money=” & money & “ and order_id='” & order_id & “'” objConn.execute(sql)

sql=“insert into cleanpick_deposithistory ”_

&“(deal, login_id, deposit_money, balance_before, ”_

&“balance_after, deposit_type, deposit_description, pay_status, order_id)values”_

&“(0,”&login_id&“,”&money&“,”&Pbalance& “,” _

&Pbalance2&“,1,'Store Money by PayPal',”&pay_status&“,'”&order_id&“')” objConn.execute(sql)

'update account information sql=“update cleanpick_account set balance=” & Pbalance2 & “ where login_id=” & login_id objConn.execute(sql)end if

'End Disposalink handling here

####

elseif(objHttp.responseText = “INVALID”)then ' log for manual investigation ' add code to handle the INVALID scenario response.Write(“INVALID handle”)else ' error end if set objHttp = nothing %>

第四篇:Android蓝牙开发小结

学习之前先了解两个基本概念:

一、RFCOMM协议:

一个基于欧洲电信标准协会ETSI07.10规程的串行线性仿真协议。此协议提供RS232控制和状态信号,如基带上的损坏,CTS以及数据信号等,为上层业务(如传统的串行线缆应用)提供了传送能力。

RFCOMM是一个简单传输协议,其目的是针对如何在两个不同设备上的应用之间保证一条完整的通信路径,并在它们之间保持一通信段。

RFCOMM是为了兼容传统的串口应用,同时取代有线的通信方式,蓝牙协议栈需要提供与有线串口一致的通信接口而开发出的协议。RFCOMM协议提供对基于L2CAP协议的串口仿真,基于ETSI07.10。可支持在两个BT设备之间同时保持高达60路的通信连接。

RFCOMM只针对直接互连设备之间的连接,或者是设备与网络接入设备之间的互连。通信两端设备必须兼容于RFCOMM协议,有两类设备:DTE(Data Terminal Endpoint,通信终端,如PC,PRINTER)和DCE(Data Circuit Endpoint,通信段的一部分,如Modem)。此两类设备不作区分。

二、MAC硬件地址

MAC(Medium/MediaAccess Control, 介质访问控制)MAC地址是烧录在NetworkInterfaceCard(网卡,NIC)里的.MAC地址,也叫硬件地址,是由48比特长(6字节),16进制的数字组成.0-23位叫做组织唯一标志符(organizationally unique,是识别LAN(局域网)节点的标识.24-47位是由厂家自己分配。其中第40位是组播地址标志位。网卡的物理地址通常是由网卡生产厂家烧入网卡的EPROM(一种闪存芯片,通常可以通过程序擦写),它存储的是传输数据时真正赖以标识发出数据的电脑和接收数据的主机的地址。

Android平台提供的蓝牙API去实现蓝牙设备之间的通信,蓝牙设备之间的通信主要包括了四个步骤:设置蓝牙设备、寻找局域网内可能或者匹配的设备、连接设备和设备之间的数据传输。以下是建立蓝牙连接的所需要的一些基本类:

BluetoothAdapter类:代表了一个本地的蓝牙适配器。它是所有蓝牙交互的的入口点。利用它你可以发现其他蓝牙设备,查询绑定了的设备,使用已知的MAC地址实例化一个蓝牙设备和建立一个BluetoothServerSocket(作为服务器端)来监听来自其他设备的连接。

BluetoothDevice类:代表了一个远端的蓝牙设备,使用它请求远端蓝牙设备连接或者获取远端蓝牙设备的名称、地址、种类和绑定状态。(其信息是封装在bluetoothsocket中)。

Bluetoothsocket类:代表了一个蓝牙套接字的接口(类似于tcp中的套接字),它是应用程序通过输入、输出流与其他蓝牙设备通信的连接点。

Blueboothserversocket类:代表打开服务连接来监听可能到来的连接请求(属于server端),为了连接两个蓝牙设备必须有一个设备作为服务器打开一个服务套接字。当远端设备发起连接连接请求的时候,并且已经连接到了的时候,Blueboothserversocket类将会返回一个bluetoothsocket。

Bluetoothclass类:描述了一个蓝牙设备的一般特点和能力。它的只读属性集定义了设备的主、次设备类和一些相关服务。然而,它并没有准确地描述所有该设备所支持的蓝牙文件和服务,而是作为对设备种类来说的一个小小暗示。下面说说具体的编程实现 1.启动蓝牙功能:

首先通过调用静态方法getDefaultAdapter()获取蓝牙适配器BluetoothAdapter,以后你就可以使用该对象了。如果返回为空,the story is over。例如:

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();if(mBluetoothAdapter == null){ // Device does not support Bluetooth } 其次,调用isEnabled()来查询当前蓝牙设备的状态,如果返回为false,则表示蓝牙设备没有开启,接下来你需要封装一个ACTION_REQUEST_ENABLE请求到intent里面,调用startActivityForResult()方法使能蓝牙设备,例如:

if(!mBluetoothAdapter.isEnabled()){ Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);}

2.查找设备:

使用BluetoothAdapter类里的方法,你可以查找远端设备(大概十米以内)或者查询在你手机上已经匹配(或者说绑定)的其他手机了。当然需要确定对方蓝牙设备已经开启或者已经开启了“被发现使能”功能(对方设备是可以被发现的是你能够发起连接的前提条件)。如果该设备是可以被发现的,会反馈回来一些对方的设备信息,比如名字、MAC地址等,利用这些信息,你的设备就可以选择去向对方初始化一个连接。

如果你是第一次与该设备连接,那么一个配对的请求就会自动的显示给用户。当设备配对好之后,他的一些基本信息(主要是名字和MAC)被保存下来并可以使用蓝牙的API来读取。使用已知的MAC地址就可以对远端的蓝牙设备发起连接请求。

匹配好的设备和连接上的设备的不同点:匹配好只是说明对方设备发现了你的存在,并拥有一个共同的识别码,并且可以连接。连接上:表示当前设备共享一个RFCOMM信道并且两者之间可以交换数据。也就是是说蓝牙设备在建立RFCOMM信道之前,必须是已经配对好了的。

3.查询匹配好的设备:

在建立连接之前你必须先查询配对好了的蓝牙设备集(你周围的蓝牙设备可能不止一个),以便你选取哪一个设备进行通信,例如你可以你可以查询所有配对的蓝牙设备,并使用一个数组适配器将其打印显示出来:

Set pairedDevices = mBluetoothAdapter.getBondedDevices();// If there are paired devices if(pairedDevices.size()> 0){ //Loop through paired devices for(BluetoothDevice device : pairedDevices){ // Add the name and address to an array adapter to show in a ListView mArrayAdapter.add(device.getName()+ “n” + device.getAddress());} 建立一个蓝牙连接只需要MAC地址就已经足够了。

4.扫描设备:

扫描设备,只需要简单的调用startDiscovery()方法,这个扫描的过程大概持续是12秒,应用程序为了ACTION_FOUND动作需要注册一个BroadcastReceiver来接受设备扫描到的信息。对于每一个设备,系统都会广播ACTION_FOUND动作。例如: // Create a BroadcastReceiver for ACTION_FOUND private final BroadcastReceiver mReceiver = new BroadcastReceiver(){ public void onReceive(Context context, Intent intent){ String action = intent.getAction();// When discovery finds a device if(BluetoothDevice.ACTION_FOUND.equals(action)){ // Get the BluetoothDevice object from the Intent BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);// Add the name and address to an array adapter to show in a ListView mArrayAdapter.add(device.getName()+ “n” + device.getAddress());} } };// Register the BroadcastReceiver IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);registerReceiver(mReceiver, filter);// Don't forget to unregister during onDestroy 注意:扫描的过程是一个很耗费资源的过程,一旦你找到你需要的设备之后,在发起连接请求之前,确保你的程序调用cancelDiscovery()方法停止扫描。显然,如果你已经连接上一个设备,启动扫描会减少你的通信带宽。

5.使能被发现:Enabling discoverability 如果你想使你的设备能够被其他设备发现,将ACTION_REQUEST_DISCOVERABLE动作封装在intent中并调用startActivityForResult(Intent, int)方法就可以了。他将在不使你应用程序退出的情况下使你的设备能够被发现。缺省情况下的使能时间是120秒,当然你可以可以通过添加EXTRA_DISCOVERABLE_DURATION字段来改变使能时间(最大不超过300秒,这是出于对你设备上的信息安全考虑)。例如: Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);startActivity(discoverableIntent);运行该段代码之后,系统会弹出一个对话框来提示你启动设备使能被发现(此过程中如果你的蓝牙功能没有开启,系统会帮你开启),并且如果你准备对该远端设备发现一个连接,你不需要开启使能设备被发现功能,因为该功能只是在你的应用程序作为服务器端的时候才需要。

6.连接设备:

在应用程序中,想建立两个蓝牙设备之间的连接,必须实现客户端和服务器端的代码(因为任何一个设备都必须可以作为服务端或者客户端)。一个开启服务来监听,一个发起连接请求(使用服务器端设备的MAC地址)。当他们都拥有一个蓝牙套接字在同一RFECOMM信道上的时候,可以认为他们之间已经连接上了。服务端和客户端通过不同的方式或其他们的蓝牙套接字。当一个连接监听到的时候,服务端获取到蓝牙套接字。当客户可打开一个FRCOMM信道给服务器端的时候,客户端获取到蓝牙套接字。

注意:在此过程中,如果两个蓝牙设备还没有配对好的,android系统会通过一个通知或者对话框的形式来通知用户。RFCOMM连接请求会在用户选择之前阻塞。如下图:

7.服务端的连接:

当你想要连接两台设备时,一个必须作为服务端(通过持有一个打开的BluetoothServerSocket),目的是监听外来连接请求,当监听到以后提供一个连接上的BluetoothSocket给客户端,当客户端从BluetoothServerSocket得到BluetoothSocket以后就可以销毁BluetoothServerSocket,除非你还想监听更多的连接请求。

建立服务套接字和监听连接的基本步骤:

首先通过调用listenUsingRfcommWithServiceRecord(String, UUID)方法来获取BluetoothServerSocket对象,参数String代表了该服务的名称,UUID代表了和客户端连接的一个标识(128位格式的字符串ID,相当于PIN码),UUID必须双方匹配才可以建立连接。其次调用accept()方法来监听可能到来的连接请求,当监听到以后,返回一个连接上的蓝牙套接字BluetoothSocket。最后,在监听到一个连接以后,需要调用close()方法来关闭监听程序。(一般蓝牙设备之间是点对点的传输)

注意:accept()方法不应该放在主Acitvity里面,因为它是一种阻塞调用(在没有监听到连接请求之前程序就一直停在那里)。解决方法是新建一个线程来管理。例如: private class AcceptThread extends Thread { private final BluetoothServerSocket mmServerSocket;public AcceptThread(){ // Use a temporary object that is later assigned to mmServerSocket, // because mmServerSocket is final BluetoothServerSocket tmp = null;try { // MY_UUID is the app's UUID string, also used by theclient code tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID);} catch(IOException e){ } mmServerSocket = tmp;} public void run(){ BluetoothSocket socket = null;// Keep listening until exception occurs or a socket is returned while(true){ try { socket = mmServerSocket.accept();} catch(IOException e){ break;} // If a connection was accepted if(socket!= null){ // Do work to manage the connection(in a separate thread)manageConnectedSocket(socket);mmServerSocket.close();break;} } } /** Will cancel the listening socket, and cause the thread to finish */ public void cancel(){ try { mmServerSocket.close();} catch(IOException e){ } } }

8.客户端的连接:

为了初始化一个与远端设备的连接,需要先获取代表该设备的一个BluetoothDevice对象。通过BluetoothDevice对象来获取BluetoothSocket并初始化连接,具体步骤:

使用BluetoothDevice对象里的方法createRfcommSocketToServiceRecord(UUID)来获取BluetoothSocket。UUID就是匹配码。然后,调用connect()方法来。如果远端设备接收了该连接,他们将在通信过程中共享RFFCOMM信道,并且connect()方法返回。例如: private class ConnectThread extends Thread { private final BluetoothSocket mmSocket;private final BluetoothDevice mmDevice;public ConnectThread(BluetoothDevice device){ // Use a temporary object that is later assigned to mmSocket, // because mmSocket is final BluetoothSocket tmp = null;mmDevice = device;// Get a BluetoothSocket to connect with the given BluetoothDevice try { // MY_UUID is the app's UUID string, also used by the server code tmp = device.createRfcommSocketToServiceRecord(MY_UUID);} catch(IOException e){ } mmSocket = tmp;}

public void run(){ // Cancel discovery because it will slow down the connection mAdapter.cancelDiscovery();try { // Connect the device through the socket.This will block // until it succeeds or throws an exception mmSocket.connect();} catch(IOException connectException){ // Unable to connect;close the socket and get out try { mmSocket.close();} catch(IOException closeException){ } return;} // Do work to manage the connection(in a separate thread)manageConnectedSocket(mmSocket);}

注意:conncet()方法也是阻塞调用,一般建立一个独立的线程中来调用该方法。在设备discover过程中不应该发起连接connect(),这样会明显减慢速度以至于连接失败。且数据传输完成只有调用close()方法来关闭连接,这样可以节省系统内部资源。

9.管理连接(主要涉及数据的传输):

当设备连接上以后,每个设备都拥有各自的BluetoothSocket。现在你就可以实现设备之间数据的共享了。

1> 首先通过调用getInputStream()和getOutputStream()方法来获取输入输出流。然后通过调用read(byte[])和write(byte[]).方法来读取或者写数据。

2> 实现细节:以为读取和写操作都是阻塞调用,需要建立一个专用现成来管理。3>

private class ConnectedThread extends Thread { private final BluetoothSocket mmSocket;private final InputStream mmInStream;private final OutputStream mmOutStream;public ConnectedThread(BluetoothSocket socket){ mmSocket = socket;InputStream tmpIn = null;OutputStream tmpOut = null;// Get the input and output streams, using temp objects because // member streams are final try { tmpIn = socket.getInputStream();tmpOut = socket.getOutputStream();} catch(IOException e){ } mmInStream = tmpIn;mmOutStream = tmpOut;} public void run(){ byte[] buffer = new byte[1024];// buffer store for the stream int bytes;// bytes returned from read()// Keep listening to the InputStream until an exception occurs while(true){ try { // Read from the InputStream bytes = mmInStream.read(buffer);// Send the obtained bytes to the UI Activity mHandler.obtainMessage(MESSAGE_READ, bytes,-1, buffer).sendToTarget();} catch(IOException e){ break;} } } /* Call this from the main Activity to send data to the remote device */ public void write(byte[] bytes){ try { mmOutStream.write(bytes);} catch(IOException e){ } } /* Call this from the main Activity to shutdown the connection */ public void cancel(){ try { mmSocket.close();} catch(IOException e){ } } }

第五篇:wireshark插件开发小结

wireshark插件开发小结

关键字:wireshark, plugin, lua,protocol 概述wireshark是非常流行的网络封包分析软件,功能十分强大。可以抓取各种网络包,并显示网络包的详细信息。为什么使用wiresharkTroubleshoot network problems

定位网络问题Debug protocol implementations 调试自己实现的协议Learn network protocol internals 分析协议内部实现分析网络性能网络端点,统计每个端点的地址、发送或收到的数据包的数量和字节数。

网络会话,统计地址A 和地址B 端点间会话的发送或收到的数据包的数量和字节数。协议分层,可查看各种协议的分布统计情况。数据包长度分析。架构Wireshark是分析网络数据的利器,也是掌握计算机网络的工具。wireshark用C语言开发,架构合理。wireshark从网络协议栈拷贝网络包,可以保存为pcap文件。wireshark 内部实现

Plugin dissectorDecodes protocols that are newly added.解析新的网络协议Faster rebuilds and bug correction.(Due to stand alone librariesgenerated for each plugin dissector)? 每个插件是单独的dll文件,这样可以快速替换插件,加快插件开发速度。插件文件路径 : 安装目录/plugins/ Wiretapused to read/write capture files

pcap文件读写 winpcap

(windows packet capture)是windows平台下一个免费,公共的网络访问系统。winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。它用于windows系统下的直接的网络编程。插件(plugin)Wireshark使用C语言编写而成,它支持动态链接库形式的插件扩展。除此之外,wireshark内置了Lua脚本引擎,可以使用Lua脚本语言编写dissector插件。Wireshark lua proto APIfunctiondescriptionProto.new(name, desc)Creates a new protocolproto.dissectorThe protocol's dissectorproto.fieldsThe Fields Table of this dissectorproto.prefsThe preferences of this dissectorproto.prefs_changedThe preferences changed routine of this dissectorproto.initThe init routine of this dissectorproto.nameThe name given to this dissectorproto.descriptionThe description given to this dissector

下载hr开发小结word格式文档
下载hr开发小结.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    落实以人为本科学观做好HR开发工作

    落实以人为本的科学观 做好人力资源开发工作 8月26日,由中国社会科学院人力资源研究中心主办的“2006中国杰出人力资源管理者年会”在人民大会堂召开,年会旨在为人力资源部......

    校本课程开发阶段小结

    积极开发校本课程大力推进课改实验 ——屈原镇校本课程开发与实施阶段性小结 理性思考 教育部在《基础教育课程改革纲要》中明确指出,学校在执行国家课程和地方课程的同时,应......

    勘探开发研究院实习小结

    勘探开发研究院实习小结 在过去的一个月的时间,我们完成了在勘探开发研究院的实习。在这短暂的过程,通过各位领导及师傅的言传身教,了解到了勘探开发研究院如何对玉门油田的发......

    校本课程开发阶段小结

    双泉小学 校本课程开发阶段总结 (2011-2012学年下期) 2012.6 双泉小学 校本课程开发阶段总结 经过了一个学期的努力工作,已初步完成了本阶段的计划,学生在学习《雕版印刷》......

    异地跨团队开发小结

    异地跨团队开发小结 对开发中遇到的问题进行小结: 1计划很重要 包括项目完整流程的计划,各阶段各方面各部门各环境的计划与协调。计划时有留下余地时间,计划制定要从粗到细,具......

    化工开发与设计小结范文

    第一章小结 1、实验室研究的结果是确定一种有希望的反应方法;化工过程开发的结果是实现工业化。 2、化工过程研究与开发的基本方法有实验研究方法和数学模型方法,数学模型方法......

    开发区党委副书记个人思想工作小结

    开发区党委副书记个人思想工作小结 开发区XX年5月成立时,我在五吕镇担任党委副书记,随镇成建制划入开发区而成为一名开发区人,XX年2月调区农办任副主任、同年8月调区党政办任副......

    HR专题:职业规划

    HR专题:职业规划一、【职业生涯四阶段】1)起步:毕业后5~6年,了解社会及学习工作的方法,雄心勃勃、自信。需踏实学习实践知识,找出优势,挖掘潜力;2)成长:5~7年,熟悉某领域,有专业水准。需......