快应用问题:怎么将回调函数中的返回值赋给外部变量?

我是这样写的,但是赋值不上,仍然为空,请教一下

onReady() {
    let len = this.markers.length + 1
    this.watchHeight = len > 3 ? '450' : len*150+''
    const that = this

    prompt.showToast({
      message: '请稍后,加载中...'
    })

    device.getUserId({
      success (res){
        that.userId = res.userId
      },
      fail (data, code) {
        prompt.showToast({
          message: '出错了!错误码为:'+code
        })
      }
    })

    prompt.showDialog({
      message: that.userId
    })
}

1个回答

device.getUserId({
    success: function(res){
        that.userId = res.userId
    }.bind(this),
    fail (data, code) {
        prompt.showToast({
            message: '出错了!错误码为:'+code
        })
    }
})
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
tkinter想要获得控件回调函数的返回值
tkinter想要获得控件回调函数的返回值,用了global变量,但必须关闭窗口,可以不关窗口继续在窗口中使用吗? ``` import tkinter as tk from tkinter import ttk root = tk.Tk() def Tj_go(*args): global Tj_num Tj_num = int(Tj_numberChosen.get()) return Tj_num Tj_number = tk.StringVar() Tj_numberChosen = ttk.Combobox(root, width=6, textvariable=Tj_number) Tj_numberChosen['values'] = (1, 2, 3, 4) Tj_numberChosen.grid(row=4, column=2) Tj_numberChosen.current(0) Tj_num = 1 Tj_numberChosen.bind("<<ComboboxSelected>>",Tj_go) ``` 想把用户选择后的Tj_num的值返回到全局,后面还需要用
回调函数里的变量作为外层函数返回值的问题
学艺不精焦头烂额 代码是多层回调的 期望得到函数c里的arr作为函数A的返回值,但是因为异步的原因,会先执行return语句,返回undefined ``` var arr=[]; let A = ()=>{ //逻辑处理 B(function(){ C(function(){ let a = 10; arr.push(a); }) }) return arr } let data = A(); ``` 希望各位大大不吝赐教,在此谢过了
请教一个关于NodeJs中在多个pool.query回调中的变量赋值问题?
**目的描述: ** 我根据查到的总的数据数目和前端请求分页的每页数目,计算出要分的总的页数,以便于做个页码翻页。 **出现问题:** 代码部分: ``` router.get('/list',(req,res)=>{ var obj = req.query; var $page = Math.round(obj.page); var $size = Math.round(obj.size); var $pageCount = null; //临时存储 总页数 var pageCount = 0;//第一种写法 console.log(obj); if(!$page){ $page = 1; } if(!$size){ $size = 10; } $page --; console.log('前端请求条数'+$size); console.log('初始值'+ pageCount);//this.pageCount //console.log('初始值'+ pageCount);//第二种写法 //获得总的页面数 var sqlstr2 = 'SELECT * FROM xz_laptop'; pool.query(sqlstr2,(err,result)=>{ if(err) throw err; if(result.length > 0){ //总页数 $pageCount = result.length; console.log('总数据数'+$pageCount); console.log($pageCount/$size); pageCount = Math.ceil($pageCount/$size); console.log('总的页数:'+ pageCount); } }); //分页查询 var sqlstr = 'SELECT * FROM xz_laptop LIMIT ? , ?'; pool.query(sqlstr,[($page*$size),$size],(err, result)=>{ //console.log() if(err) throw err; console.log(result); if(result.length > 0){ console.log('返回页数'+ pageCount ); res.send({data:result,pno:($page+1),pCount:pageCount}); //res.send(result); }else{ res.send({code:301,msg:'list error'}); } }); ``` 采用第一种写法:pageCount只能获取到第一次服务器开启时的数据,此后返回的pageCount均为null,而且返回的数据对象是: {data:…, pno:…,//返回的页码 pCount:…,//总的页数,也就是我想要的数 pageCount:….//这是什么鬼,为什么会出现四个属性?? } 可是我原本的数据对象是这样的: {data:result,pno:($page+1),pCount:pageCount} 为什么会多出来一个属性??这是一点。 采用第二种写法,直接不声明pageCount,后续的pageCount全部使用this.pageCount,就可以得到想要的结果数据,但是我并没有赋初始值,可是初始值哪里会打印一个1是什么鬼。而且为什么这样就能打印出来,因为是隐式的提升为对象的属性了吗?? 如果有this指向问题,用变量保存了this,依然不行,结果是undefine,为什么呢? 还有像这种执行多条Sql语句是否能这样写? 望各位大佬指教! 考虑过函数提升、this指向、但是还是想不通,为什么呢??
jquery $.ajax()不执行success回调函数,求解!
``` out.println("<div style='margin:10px 0 0 20px;color:black;font-family:微软雅黑;font-size:1.1em;'>用户基本信息列表</div>") ``` servlet返回这一条html代码 ``` $.ajax({ type: "post", dataType: "html", url: "GetUserList", sucess:function(data){ alert(data); $("#rtop").html(data); $("#rbottom").html(""); } }); ``` 前台代码,已用firebug调试,返回状态200ok 在变量里也能看到正确的返回值,但是就是不执行success函数,求解!
做ajax请求时callback函数调用时this变量的变化问题
代码大致如下 [code="javascript"] var a = (function(){ var a = function (...,param) { return new a.fn.init (...,param) } a.fn = a.prototype = { init: function (...) { ... this.param = param } callback: function (response) { this.param //这里似乎this发生改变,this.param值为undefined ... } getData: function() { //通过ajax获得数据,然后回调 callback doGetAjax(url,data,this.callback) } } a.fn.init.prototype = a.fn; })() [/code] 像这种地方想要在callback获得param应该怎么做? edit1 -------------------------------------- 想了一下,这里ajax返回调用的时候this已经没有绑定了,在a内找不到再次与this绑定的方法, 那就不使用this,使用函数类的局部全局变量达到私有变量的效果, 代码改变如下 :[code="javascript"] var a = (function(){ var pParam; //添加私有变量 ... init: function (...) { ... pParam=this.param = param } ... callback: function (response) { pParam //这里似乎this发生改变,this.param值为undefined ... } [/code] 想了一下,是否所有对象的属性都应该赋值给 私有变量,而 this.XXX则是要暴露给外界才多加一个赋值? edit 2 ------------------------- 这两天重新看了下,发现这种私有变量是所有实例共享的,一个页面有多个同类组件的话就不行了. 如果是存储一个共享私有变量,每次ajax请求以后都手动立刻将私有变量赋值给相应实例变量,但这样的缺点是多次自动进行ajax操作的话是实现不了的,比如分页ajax请求。 这种情况究竟咋解决.
vc2010下串口函数返回值无效的问题(关闭后再打开即无效)
原来vc6下的代码,可以正常使用,现在移植到2010和2013下,问题出现,具体描述如下: 因为要读取一个设备的数据(该数据由软件操作控制发送数据,可持续不断以一定格式发);vc2010环境,用API函数(createfile)打开串口,期间用afxbeginthread开启了一个线程,运行进程函数,该函数主要为只要联机变量为真(连上了串口),就等待串口的字符串,然后把字符串放到缓存,回调函数完成字符串的处理和显示。 现在,当我第一次打开串口(没有连设备,只是用一根USB-RS232线转了一个串口),正常打开,关闭后(CloseHandle函数)再次打开,createfile返回的句柄即显示无效:错误代码6,句柄为0xfffffff。只能重新运行程序,然后还是第一次正常打开,关闭后即无法打开! ```打开串口,并启动线程 BOOL CComLink::NewConnection(BYTE nRetType, WORD UserID, BYTE nPort, LPVOID pOwner, LPVOID pParam) { if(m_bConnected) return FALSE; m_hCom = OpenConnection(CommProc, nPort); m_UserID = UserID; m_nRetType = nRetType; m_pWnd = (CWnd *)pOwner; m_pMsgFunc = (_CALLBACK_MSG *)pParam; return m_bConnected; } HANDLE CComLink::OpenConnection(AFX_THREADPROC pfnThreadProc, BYTE nPort) { HANDLE h_Com; wchar_t szPort[15]; COMMTIMEOUTS CommTimeOuts; wsprintf(szPort,_T("\\\\.\\COM%d"),nPort); h_Com = CreateFile(szPort,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL); if(h_Com == INVALID_HANDLE_VALUE) return NULL; else { SetCommMask(h_Com,EV_RXCHAR); SetupComm(h_Com,4096,4096); PurgeComm(h_Com, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR ); CommTimeOuts.ReadIntervalTimeout = MAXDWORD; CommTimeOuts.ReadTotalTimeoutMultiplier = 0; CommTimeOuts.ReadTotalTimeoutConstant = 1000; CommTimeOuts.WriteTotalTimeoutMultiplier = 0; CommTimeOuts.WriteTotalTimeoutConstant = 1000; SetCommTimeouts(h_Com, &CommTimeOuts); m_bConnected = true; } if(SetCom(h_Com)) { m_pThread = AfxBeginThread(pfnThreadProc, this, THREAD_PRIORITY_NORMAL, 0, 0, NULL); if(m_pThread == NULL) { CloseCom(); return NULL; } else { m_bConnected = true; } } else { CloseCom(); return NULL; } return h_Com; } ``` ```进程函数 UINT CommProc(LPVOID pParam) { DWORD dwMask = 0; COMSTAT ComStat; DWORD dwErrorFlags; DWORD dwLength; CComLink *pVoid=(CComLink*)pParam; SetCommMask(pVoid->m_hCom,EV_RXCHAR); while(pVoid->m_bConnected) { WaitCommEvent(pVoid->m_hCom, &dwMask, NULL); // 等待串口消息 if((dwMask & EV_RXCHAR)==EV_RXCHAR) // 如果是字符消息 { ClearCommError(pVoid->m_hCom, &dwErrorFlags, &ComStat); if(ComStat.cbInQue) { dwLength=min(sizeof(pVoid->m_DataBuf) - pVoid->m_nDataLen, ComStat.cbInQue); // 取缓冲区数据,确保分配的缓冲区能足够存储 if(!ReadFile(pVoid->m_hCom, &pVoid->m_DataBuf[pVoid->m_nDataLen], dwLength, &dwLength, &pVoid->osRead)) // 读取数据,存储到当前缓冲区位置之后 { if(GetLastError()==ERROR_IO_PENDING) { GetOverlappedResult(pVoid->m_hCom, &pVoid->osRead, &dwLength, true); } } pVoid->m_nDataLen += dwLength; // 数据长度累加 if(pVoid->m_nRetType == DATA_BY_MESSAGE) // 消息模式返回数据 { pVoid->m_pWnd -> SendMessage(WM_COM_RECMSG, pVoid->m_UserID); } else if(pVoid->m_nRetType == DATA_BY_CALLBACK) // 回调函数返回数据 { pVoid->m_pMsgFunc(WM_COM_RECMSG, (long)pVoid->m_pWnd, pVoid->m_UserID); } } }// end if } return 0; } ``` ```关闭串口 BOOL CComLink::CloseCom() { FindClose(m_hCom); CloseHandle(m_hCom); m_bConnected = false; m_hCom =INVALID_HANDLE_VALUE; return TRUE; } ``` ```设置串口 BOOL CComLink::SetCom(HANDLE h_Com) { DCB dcb; GetCommState(h_Com,&dcb); dcb.BaudRate = m_ComSet.BaudRate; dcb.ByteSize = m_ComSet.ByteSize; dcb.Parity = m_ComSet.Parity; dcb.StopBits = m_ComSet.StopBits; dcb.fRtsControl = RTS_CONTROL_ENABLE; return SetCommState(h_Com,&dcb); } ```
为啥接受不到数据AJAX
``` <script src ="Js/jquery-3.4.1.js"> </script> <script> ////定义变量保存XmlHttpRequest对象 //var xmlHttp = null; ////用于创建AJAX请求核心对象XmlHttpRequest //function createXmlHttpRequest() { // try // { // xmlHttp = new XMLHttpRequest();//适用于IE7+,Fireiox,Chrome等主流浏览器 // } // catch (Error) // { // xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//适用于IE低版本7以下的 // } //} //$(function () { // $("#ImgButOn").click(function () { // //调用函数创建XmlHttpRequest对象 // createXmlHttpRequest(); // //获得需要提交给服务器的数据 // var UserId = $("#TxtUser").val(); // var UserPwd = $("#TxtPwd").val(); // //服务端路劲,同时把数据传送到服务器地址拦 // var serverPath = "server.ashx?UserId=" + UserId + "&UserPwd=" + UserPwd + ""; // //设置XmlHttpRequest对象参数 // xmlHttp.open("get", serverPath, true); // //服务端处理结果,使用XmlHttpRequest对象状态监测 // xmlHttp.onreadystatechange = clicentCallback; // //通过XmlHttpRequest对象发送请求 // xmlHttp.send(); // }) //}) //function clicentCallback() { // //XmlHttpRequest对象状态从开始发送请求到服务端经历了4个分别是: // //返回值 0 :请求位初始化 // //返回值 1 :和服务端连接已经建立 // //返回值 2 : 请求已被服务端接受 // //返回值 3 :请求处理中 // //返回值 4 :请求处理完 // if (xmlHttp.readyState == 4) { // if (xmlHttp.status == 200) { // //获得服务端返回给客户端的结果(纯文本,xml,josn,html) // var msg = xmlHttp.responseText; // alert(msg); // } // } //} //#Jquery封装函数使用AJAX异步请求 $(function () { $("#ImgButOn").click(function () { $.ajax({ url:"server.ashx",//请求服务端地址 type:"get",//请求方式 data:{ "UserId": $("#TxtUser").val(), "UserPwd":$("#TxtPwd").val() }//发送到服务端的数据 success:function (date, status, xmlhttp) {//服务端成功处理时回调函数 alert(date + ":" + status); }, error: function () {//服务端失败时的回调函数 alert("请求未成功!"); }, dataType:"text"//预期服务端发回数据类型 }) }) </script> public void ProcessRequest(HttpContext context) { SES_Model.User user = new SES_Model.User(); //服务端要获得客户端以AJAX请求发送过来的数据 string UserId = context.Request.QueryString["UserId"]; string UserPwd = context.Request.QueryString["UserPwd"]; //在服务器中处理数据 user = SES_BLL.Users_Service.User_Enter(UserId, UserPwd); string msg = string.Empty; if (user != null) { msg = "ok"; } else { msg = "error!"; } context.Response.ContentType = "text/plain"; context.Response.Write(null); } ```
php jQuery 实现无刷新验证问题
前台要实现:焦点移出输入框,自动去验证卡券,并把验证结果无刷新返回到提示框中 ![前台](https://img-ask.csdn.net/upload/201504/09/1428593637_242261.png) 现在的问题就是,在前台的页面代码 ``` $(document).ready(function(){ //DOM的onload事件处理函数 $("#button").click(function(){ //当按钮button被点击时的处理函数 postdata(); //button被点击时执行postdata函数 }); }); function postdata(){ //提交数据函数 $.ajax({ //调用jquery的ajax方法 type: "POST", //设置ajax方法提交数据的形式 url: "checkCard.php", //把数据提交到checkCard.php data: "codeno="+$("#codeno").val(), //交的数据 success: function(msg){ //提交成功后的回调,msg变量是checkCard.php输出的内容。 $('check').innerHTML+=msg; //alert("数据提交成功"); //如果有必要,可以把msg变量的值显示到某个DIV元素中 } }); } ``` 前台显示区域: ``` <div class="contact-input"> <label>兑换码</label><br> <input type="text" name="codeno"> <input type="submit" name="button" id="button" value="WX" /> <div id="check"></div> </div> ``` 就是不成功啊,详细可见 http://bbs.csdn.net/topics/391014234?page=1#post-399081723 谢谢大家
java中charAt()方法中字符串越界
目标:写一个micro词法分析器 问题:在读入写有micro代码文件的过程中,到最后一个字符(例如37)的时候报错。 报错信息: ``` Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 37 at java.lang.StringBuffer.charAt(Unknown Source) at Analyzer.getChar(Analyzer.java:34) at Analyzer.analyse(Analyzer.java:203) at Analyzer.main(Analyzer.java:231) ``` 代码: ``` //getChar()方法 public void getChar() { ch = buffer.charAt(i); i++; } //在主函数中 if (isLetter()) { // (一)如果ch为字母 while (isLetter() || isDigit()) { concat(); getChar(); } //省略... } ``` 已更新全部代码: ``` import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class Analyzer { private String keyWords[] = { "int", "begin", "end", "read", "write" }; // 关键字数组 private char operators[] = { '=', '+', '-' }; // 运算符数组 private char separators[] = { ',', ';', '(', ')' }; // 分隔符数组 private String fileSrcName; // 源程序名 private StringBuffer buffer = new StringBuffer(); // 缓冲区 private char ch; // 字符变量,存放最新读进的源程序字符 private static int i = 0; private static int ketType;// 作返回值,用于调用不同的打印的方法 private String strToken; // 字符数组,存放构成单词符号的字符串 public Analyzer() { } public Analyzer(String fileSrcName) { this.fileSrcName = fileSrcName; } /** * 将下一个输入字符读到ch中,搜索指示器前移一个字符 比如字符串的长度是6 但是每个字符的下标是从0开始计算 0 1 2 3 4 5 * 所以charAt(i)中的i最大是字符串长度-1. 你在do while循环里有个i++,i 如果等于5的时候,在charAt(i)就明显越界了 */ public void getChar() { if (i < buffer.length()) {// i<6 ch = buffer.charAt(i); if (i != buffer.length()-1) { i++; } } } /** * 检查ch中的字符是否为空白,若是则调用getChar() 直至ch中进入一个非空白字符 */ public void getBc() { while (Character.isSpaceChar(ch)) getChar(); } /** * 将ch连接到strToken之后 */ public void concat() { strToken += ch; } /** * 判断字符是否为字母 */ boolean isLetter() { return Character.isLetter(ch); } /** * 判断字符是否为数字 */ boolean isDigit() { return Character.isDigit(ch); } /** * 将搜索指示器回调一个字符位置,将ch值为空白字 */ public void retract() { i--; ch = ' '; } /** * 判断单词是否为关键字 [1,5] */ public int isKeyWord() { ketType = -1; for (int i = 0; i < keyWords.length; i++) { if (keyWords[i].equals(strToken)) ketType = i + 1; } return ketType; } /** * 判断是否为运算符 [6,9) 678 */ public int isOperator() { ketType = -1; for (int i = 0; i < operators.length; i++) { // 例如operators[]有 = + -,那么operators[1] = ‘+’ // 如果调用此方法判断是否为+,则当前i遍历的0、1 // 返回的种别码ketType为1+6=7 // 符合一开始设定的种别码表 if (ch == operators[i]) ketType = i + 6; } return ketType; } /** * 判断是否为分隔符 [9,13) 9 10 11 12 */ public int isSeparators() { ketType = -1; for (int i = 0; i < separators.length; i++) { if (ch == separators[i]) ketType = i + 9; } return ketType; } /** * 打印关键字strToken */ public void insertKeyWords(String strToken) { // System.out.print("关键字,种别[1,5]"); System.out.println("(" + ketType + "," + strToken + ")"); } /** * 打印运算符ch * */ public void insertOperators(char ch) { // System.out.print("运算符,种别 [6,9)"); System.out.println("(" + ketType + "," + ch + ")"); } /** * 打印分隔符 */ public void insertSeparators() { // System.out.print("分隔符,种别 [9,13)"); System.out.println("(" + ketType + "," + ch + ")"); } // 打印常数strToken public void insertConst(String strToken) { int num = Integer.parseInt(strToken); // System.out.print("常数,种别13"); System.out.println("(" + 13 + "," + strToken + ")"); } /** * 打印标识符(ID) */ public void insertId(String strToken) { // System.out.print("标识符,种别14"); System.out.println("(" + 14 + "," + ch + ")"); } /** * 将源程序读入到缓冲区中 */ public void readFile() { try { FileReader fis = new FileReader(this.fileSrcName); BufferedReader br = new BufferedReader(fis); String temp = null; while ((temp = br.readLine()) != null) { buffer.append(temp); } } catch (FileNotFoundException e) { System.out.println("源文件未找到!"); e.printStackTrace(); } catch (IOException e) { System.out.println("读写文件出现异常!"); e.printStackTrace(); } } /** * 词法分析 */ public void analyse() { strToken = ""; // 置strToken为空串 while (i < buffer.length()) { getChar(); getBc(); if (isLetter()) { // (一)如果ch为字母 while (isLetter() || isDigit()) { concat(); getChar(); } retract(); // 回调 if (isKeyWord() > 0) { // 如果是为关键字,则保留字 insertKeyWords(strToken); } else { // 否,则 符号 insertId(strToken); } strToken = ""; } else if (isDigit()) { // (二)如果ch为数字 while (isDigit()) { concat(); getChar(); } retract(); // 回调 insertConst(strToken); // 是常数 strToken = ""; } else if (isOperator() > 0) { // 是运算符 insertOperators(ch); } else if (isSeparators() > 0) { // 是分隔符 insertSeparators(); } } } public static void main(String[] args) { Analyzer alr = new Analyzer("./src/input.txt");// 文件路径 alr.readFile(); alr.analyse(); /* * System.out.println("关键字,种别[1,5] 12345"); System.out.println( * "运算符,种别 [6,9) 678"); System.out.println("分隔符,种别 [9,13) 9 10 11 12 "); * System.out.println("常数,种别13"); //System.out.println("标识符(ID),种别14"); */ } } ```
如何把c语言转化成java语言?
#include<opencv2/imgproc/imgproc.hpp> #include<opencv2/highgui/highgui.hpp> #include<iostream> using namespace cv; using namespace std; //宏定义 #define WINDOW_NAME "image[procedure window]" //全局变量声明 Mat g_srcImage,g_maskImage; Point prevPt(-1,-1); //全局函数声明 static void on_Mouse(int event,int x,int y,int flags,void*); //主函数 int main() { //载入源图像 g_srcImage=imread("/Users/new/Desktop/1.jpg"); if(!g_srcImage.data){printf("读取源图像srcImage错误~!\n");return false;} //显示源图像 imshow(WINDOW_NAME,g_srcImage); Mat srcImage,grayImage; g_srcImage.copyTo(srcImage); //灰度化 cvtColor(srcImage, g_maskImage, COLOR_BGR2GRAY); //imshow("image[mask]",g_maskImage); cvtColor(g_maskImage, grayImage, COLOR_GRAY2BGR); //imshow("image[gray]",grayImage); //掩膜图像初始化为0 g_maskImage=Scalar::all(0); //设置鼠标回调函数 setMouseCallback(WINDOW_NAME, on_Mouse,0); //轮询按键处理 while(1) { //获取键值 int c=waitKey(0); //若按键为ESC时,退出 if((char)c == 27) break; //若按键为2时,恢复原图 if((char)c=='2') { g_maskImage=Scalar::all(0); srcImage.copyTo(g_srcImage); imshow("image",g_srcImage); } //若按键为1,则进行处理 if((char)c=='1') { //定义一些参数 int i,j,compCount=0; vector<vector<Point>>contours; vector<Vec4i> hierarchy; //寻找轮廓 findContours(g_maskImage, contours, hierarchy, CV_RETR_CCOMP, CHAIN_APPROX_SIMPLE); //轮廓为空时的处理 if(contours.empty()) continue; //复制掩膜 Mat maskImage(g_maskImage.size(),CV_32S); maskImage=Scalar::all(0); //循环绘制轮廓 for(int index=0;index>=0;index=hierarchy[index][0],++compCount) drawContours(maskImage, contours, index, Scalar::all(compCount+1),-1,8,hierarchy,INT_MAX); //compCount为零时的处理 if(compCount==0) continue; //生成随机颜色 vector<Vec3b>colorTab; for(int i=0;i<compCount;++i) { int b=theRNG().uniform(0, 255); int g=theRNG().uniform(0, 255); int r=theRNG().uniform(0, 255); colorTab.push_back(Vec3b((uchar)b,(uchar)g,(uchar)r)); } //计算处理时间并输出到窗口中 double dTime=(double)getTickCount(); //进行分水岭算法 watershed(srcImage, maskImage); dTime=(double)getTickCount()-dTime; printf("\t 处理时间=%gms\n",dTime*1000./getTickFrequency()); //双层循环,将分水岭图像遍历存入watershedImage中 Mat watershedImage(maskImage.size(),CV_8UC3); for(i=0;i<maskImage.rows;++i) for(j=0;j<maskImage.cols;++j) { int index=maskImage.at<int>(i,j); if(index==-1) watershedImage.at<Vec3b>(i,j)=Vec3b(255,255,255);//图像变白色 else if(index<=0||index>compCount) watershedImage.at<Vec3b>(i,j)=Vec3b(0,0,0);//图像变黑色 else watershedImage.at<Vec3b>(i,j)=colorTab[index-1]; } //混合灰度图和分水岭效果图并显示最终的窗口 watershedImage=watershedImage*0.5+grayImage*0.5; imshow("image[watershed]",watershedImage); } } return 0; } //回调函数定义 void on_Mouse(int event,int x,int y,int flags,void*) { //处理鼠标不在窗口中的情况 if(x<0||x>=g_srcImage.cols||y<0||y>=g_srcImage.rows) return; //处理鼠标左键相关消息 if(event==EVENT_LBUTTONUP||!(flags & EVENT_FLAG_LBUTTON))//按下左键 prevPt=Point(-1,-1); else if(event==EVENT_LBUTTONDOWN)//松开左键 prevPt=Point(x,y);//鼠标所指的位置 //鼠标左键按下并移动,绘制出白色线条 else if(event==EVENT_MOUSEMOVE && (flags & EVENT_FLAG_LBUTTON)) { Point pt(x,y); if(prevPt.x<0)//如果指出去了,返回 prevPt=pt; line(g_maskImage, prevPt, pt, Scalar::all(255),2,8,0);//画白线 line(g_srcImage,prevPt,pt,Scalar::all(255),2,8,0);//画白线 prevPt=pt; imshow(WINDOW_NAME, g_srcImage); } }
C++代码改成C语言代码,没学过C++好多看不懂啊(泪奔······)求大神指点,我用的VC6.0
代码如下, #include "winsock2.h" #include "Winsnmp.h" #include <string>这里是string以下都要用 < 和 > 括起来(不知为何不显示=,=) #include <vector>vector #include <algorithm>algorithm #include <iostream>iostream #pragma comment(lib,"wsnmp32.lib") #pragma comment(lib,"ws2_32.lib") using namespace std; typedef vector<string> strvec; typedef vector<strvec> strvec_vec; class CManager {public: CManager(string strIP,string strCommunity); //构造函数 ~CManager(); //析构函数 string ValueToString(smiVALUE sValue); //返回值转换 bool InitSnmp(); //用于加载SNMP bool Send(const strvec& strOIDArray,smiINT sPDUType=SNMP_PDU_GETNEXT); bool Receive(HSNMP_VBL& hVbl); //接收应答包 bool GetAValue(const string& strOID,string& strResult); //获取ObjectID值 bool GetTable(strvec strOIDArray,strvec_vec& strResultTable); string GetLocalIP(); //获取本机IP地址 void ErrorMessage(string strMessage); //输出错误信息 void SetEvent(); protected: HSNMP_SESSION m_hSession; //会话句柄 HSNMP_CONTEXT m_hContext; //上下文句柄 static SNMPAPI_STATUS CALLBACK Callback ( HSNMP_SESSION hSession, //WinSNMP会话句柄 HWND hWnd, //处理通知窗口的句柄 UINT wMsg, //窗口消息通知码 WPARAM wParam, //消息类型 LPARAM lParam, //PDU的请求标识符 LPVOID lpClientData //可选的自定义数据 ); private: smiUINT32 m_nMajorVersion; //WinSNMP API主版本 smiUINT32 m_nMinorVersion; //WinSNMP API副版本 smiUINT32 m_nLevel; //支持最高的操作标准 smiUINT32 m_nTranslateMode; //默认实体/上下文模式 smiUINT32 m_nRetransmitMode; //默认的重发机制 string m_IP; //IP地址 smiOCTETS m_Community; //团体名 HANDLE m_hEvent; }; // 构造函数 CManager::CManager(string strIP,string strCommunity): m_nMajorVersion(0), m_nMinorVersion(0), m_nLevel(0), m_nTranslateMode(0), m_nRetransmitMode(0), m_IP(strIP) {m_Community.len=strCommunity.length(); m_Community.ptr=new smiBYTE[strCommunity.length()]; memcpy(m_Community.ptr,strCommunity.c_str(),strCommunity.length()); m_hEvent=CreateEvent(NULL,true,false,NULL); } //析构函数 CManager::~CManager() {SnmpFreeContext(m_hContext); SnmpClose(m_hSession); SnmpCleanup(); delete[] m_Community.ptr; } //SNMP初始化函数 bool CManager::InitSnmp() { //加载SNMP if(SnmpStartup(&m_nMajorVersion,&m_nMinorVersion,&m_nLevel,&m_nTranslateMode,&m_nRetransmitMode)==SNMPAPI_FAILURE) {ErrorMessage("startup SNMP error!"); return false; } //设置传输模式 if (SnmpSetTranslateMode(m_nTranslateMode)==SNMPAPI_FAILURE) {ErrorMessage("Set transfer mode error!"); return false; } //设置重传模式 if (SnmpSetRetransmitMode(m_nRetransmitMode)==SNMPAPI_FAILURE) {ErrorMessage("Set retransmission mode error!"); return false; } //建立会话 m_hSession=SnmpCreateSession(NULL,NULL,CManager::Callback,(LPVOID)this); if(m_hSession==SNMPAPI_FAILURE) {ErrorMessage("Set conversation error!"); return false; } //建立实体 HSNMP_ENTITY hEntity; if((hEntity=SnmpStrToEntity(m_hSession,m_IP.c_str()))==SNMPAPI_FAILURE) {ErrorMessage("Creat entity error!!"); return false; } //建立上下文句柄 if((m_hContext=SnmpStrToContext(m_hSession,&m_Community))==SNMPAPI_FAILURE) {ErrorMessage("Create context handle error!!"); return false; } //设置超时时间 if (SnmpSetTimeout(hEntity,10)==SNMPAPI_FAILURE) {ErrorMessage("Set timeout error!"); return false; } //设置重传次数 if (SnmpSetRetry(hEntity,1)==SNMPAPI_FAILURE) {ErrorMessage("Set retransmissions error!"); return false; } return true; } //SNMP消息发送函数 bool CManager::Send(const strvec& strOIDArray,smiINT sPDUType) {HSNMP_VBL hVbl; HSNMP_PDU hPdu; smiOID sOid; HSNMP_ENTITY hSrcEntity,hDestEntity; //创建源主机和目的主机实体句柄 hSrcEntity = SnmpStrToEntity(m_hSession,GetLocalIP().c_str()); hDestEntity = SnmpStrToEntity(m_hSession,m_IP.c_str()); //创建变量绑定列表 if((hVbl = SnmpCreateVbl(m_hSession,NULL,NULL)) == SNMPAPI_FAILURE) return false; //点分十进制串转换成二进制格式 for(strvec::const_iterator it=strOIDArray.begin();it!=strOIDArray.end();it++) {SnmpStrToOid((*it).c_str(),&sOid); SnmpSetVb(hVbl,0,&sOid,NULL); } //将数据转换成特定PDU格式 if((hPdu = SnmpCreatePdu(m_hSession,sPDUType,0,NULL,NULL,hVbl)) == SNMPAPI_FAILURE) return false; //发送PDU if(SnmpSendMsg(m_hSession,hSrcEntity,hDestEntity,m_hContext,hPdu) == SNMPAPI_FAILURE) return false; //释放句柄 SnmpFreeEntity(hSrcEntity); SnmpFreeEntity(hDestEntity); SnmpFreePdu(hPdu); SnmpFreePdu(hVbl); return true; } //SNMP消息接收函数 bool CManager::Receive(HSNMP_VBL& hVbl) {WaitForSingleObject(m_hEvent,INFINITE); ResetEvent(m_hEvent); HSNMP_ENTITY hSrcEntity; HSNMP_ENTITY hDestEntity; HSNMP_CONTEXT hContext; HSNMP_PDU hPdu; //接收到消息 if(SnmpRecvMsg(m_hSession,&hSrcEntity,&hDestEntity,&hContext,&hPdu) == SNMPAPI_FAILURE) return false; smiINT PDU_type; smiINT error_status; smiINT error_index; //提取PDU中的数据 if(SnmpGetPduData(hPdu,&PDU_type,NULL,&error_status,&error_index,&hVbl) == SNMPAPI_FAILURE) return false; return true; } //SNMP数值转换函数 string CManager::ValueToString(smiVALUE sValue) {char cBuffer[1500]; memset(cBuffer,0,1500); switch(sValue.syntax) {case SNMP_SYNTAX_NSAPADDR: case SNMP_SYNTAX_IPADDR: sprintf(cBuffer,"%d.%d.%d.%d",sValue.value.string.ptr[0],sValue.value.string.ptr[1],sValue.value.string.ptr[2],sValue.value.string.ptr[3]); break; case SNMP_SYNTAX_OPAQUE: case SNMP_SYNTAX_OCTETS: if(sValue.value.string.len==0) sprintf(cBuffer,"OCTETS NULL"); else {memset(sValue.value.string.ptr+sValue.value.string.len,0,1); sprintf(cBuffer,"%s",sValue.value.string.ptr); } break; case SNMP_SYNTAX_TIMETICKS: int iHours,iMinutes,iSeconds; long lUptime; lUptime=sValue.value.uNumber/100; iHours=(int)(lUptime/3600); iMinutes=(int)((lUptime%3600)/60); iSeconds=(int)((lUptime%60)); sprintf(cBuffer,"%d时,%d分,%d秒",iHours,iMinutes,iSeconds); break; case SNMP_SYNTAX_INT: sprintf(cBuffer,"%d",sValue.value.sNumber); break; case SNMP_SYNTAX_UINT32: case SNMP_SYNTAX_CNTR32: case SNMP_SYNTAX_GAUGE32: sprintf(cBuffer,"%U",sValue.value.uNumber); break; default: sprintf(cBuffer,"NULL"); break; } return string(cBuffer); } //获得路由器信息函数 bool CManager::GetAValue(const string& strOID,string& strResult) {HSNMP_VBL hVbl; smiOID sOIDRecv; smiVALUE sValue; int iCount; strvec strOIDArray; strOIDArray.push_back(strOID+".0"); //发送请求列表string没有成功 if(!Send(strOIDArray,SNMP_PDU_GET)) return false; //没有接收到应答 if(!Receive(hVbl)) return false; //计算返回Vbl的行数 iCount = SnmpCountVbl(hVbl); if(iCount!=1) {strResult="SnmpCounVbl error!"; return false; } //取返回结果 if(SnmpGetVb(hVbl,1,&sOIDRecv,&sValue) == SNMPAPI_FAILURE) {strResult="SnmpGetVb error!"; return false; } strResult=ValueToString(sValue); SnmpFreeVbl(hVbl); return true; } //获得路由表信息函数 bool CManager::GetTable(strvec strOIDArray, strvec_vec& strResultTable) { long lIfEnd; HSNMP_VBL hVbl; smiOID sOIDSend; smiOID sOIDRecv; smiVALUE sValue; int iCount,iOIDLen; char cBuffer[100]; if (strOIDArray.empty()) return false; //计算OID标识符的长度 iOIDLen=count((strOIDArray[0]).begin(),(strOIDArray[0]).end(),'.')+1; while(true) {//发送请求列表string没有成功 if(!Send(strOIDArray)) return false; //没有接收到应答 if(!Receive (hVbl)) return false; //计算返回Vbl的行数 iCount = SnmpCountVbl(hVbl); for(int i=0;i<iCount;i++) {//取返回结果 if(SnmpGetVb(hVbl,i+1,&sOIDRecv,&sValue)==SNMPAPI_FAILURE) {ErrorMessage("获取结果失败!"); return false; } memset(cBuffer,0,100); SnmpStrToOid(strOIDArray[i].c_str(),&sOIDSend); SnmpOidToStr(&sOIDRecv,100,cBuffer); strOIDArray[i]=string(cBuffer); //判断格式是否一致,决定是否继续循环 SnmpOidCompare(&sOIDSend,&sOIDRecv,iOIDLen,&lIfEnd); if(lIfEnd !=0) break; strResultTable[i].push_back(ValueToString(sValue)); } if(lIfEnd !=0) break; } SnmpFreeVbl(hVbl); return true; } //获得本机地址函数 string CManager::GetLocalIP() {char cHost[512]; PHOSTENT pHostIP; string HostIP; if (gethostname(cHost, sizeof(cHost))==0) {pHostIP = gethostbyname(cHost); if(pHostIP !=NULL) HostIP = inet_ntoa(*(struct in_addr *)(pHostIP->h_addr_list[0])); } return HostIP; } //错误信息函数 void CManager::ErrorMessage(string strMessage) {cout<<strMessage<<endl; } //事件处理函数 void CManager::SetEvent() {::SetEvent(m_hEvent); } //事件回调函数 SNMPAPI_STATUS CALLBACK CManager::Callback(HSNMP_SESSION hSession, HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM lParam,LPVOID lpClientData) {((CManager*)lpClientData)->SetEvent(); return 1; } // Main.CPP: 主函数的实现 //#include "Manager.h" void main(int argc,char *argv[]) {//检查输入命令格式 if(argc!=3) {cout<<"Please input command:SnmpManager ip_address community"<<endl; return; } //初始化CManger对象 CManager cManger(argv[1],argv[2]); bool Status=cManger.InitSnmp(); //输出路由器的基本信息 cout<<"----------------------GetValue Text------------------------"<<endl; string Result; if((Status=cManger.GetAValue("1.3.6.1.2.1.1.1",Result))==false) cout<<"GetAnValue error!"<<endl; else cout<<Result<<endl; //输出路由器的路由表信息 cout<<"----------------------GetTable Test------------------------"<<endl; strvec RouteOidArray; RouteOidArray.push_back ("1.3.6.1.2.1.4.21.1.1"); RouteOidArray.push_back ("1.3.6.1.2.1.4.21.1.2"); RouteOidArray.push_back ("1.3.6.1.2.1.4.21.1.7"); RouteOidArray.push_back ("1.3.6.1.2.1.4.21.1.8"); RouteOidArray.push_back ("1.3.6.1.2.1.4.21.1.11"); strvec_vec IpResultTable(RouteOidArray.size()); if (Status=cManger.GetTable(RouteOidArray,IpResultTable)==false) cout<<"GetTable error"<<endl; else {for(strvec_vec::iterator it1=IpResultTable.begin();it1!=IpResultTable.end();it1++) {strvec AGroup=*it1; for(strvec::iterator it2=AGroup.begin();it2!=AGroup.end();it2++) {cout<<"*it2"<<" ";} cout<<endl; } } }
jQuery ,ajax,中文传值传不到的问题,第一次使用
<p> </p> <p>ajax.html,比如我把jsp中的tom改为张三,然后在ajax.html中可以输入张三,显示数据。但是显示不出,我也知道是编码的问题,但是不知道做,附件是jquery.js</p> <p> </p> <pre name="code" class="html">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;ajax.html&lt;/title&gt; &lt;meta http-equiv="content-type" content="text/html; charset=UTF-8"&gt; &lt;script type="text/javascript" src="/test/js/jquery-1.4.3.js"&gt; &lt;/script&gt; &lt;style type="text/css"&gt; body{font-size:13px} .divFrame{width:260px;border:solid 1px #666} .divFrame .divTitle{padding:5px;background-color:#eee} .divFrame .divTitle .clsShow{font-size:14px} .btn {border:#666 1px solid;padding:2px;width:80px; } &lt;/style&gt; &lt;script type="text/javascript"&gt; $(function(){ $("#Button1").click(function(){ //按钮单击事件 //打开文件,并通过回调函数返回嗠器响应后的数据 $.post("UserInfo.jsp",{name:encodeURI($("#txtName").val()),sex:encodeURI($("#selSex").val())} ,function(data){ $("#divTip").empty().html(data); }) }) }) &lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;div class="divFrame"&gt; &lt;div class="divTitle"&gt; name:&lt;input type="text" id="txtName"/&gt; &lt;br/&gt; sex:&lt;input type="text" id="selSex"/&gt;&lt;br/&gt; &lt;input id="Button1" type="button" class="btn" value="获取数据"/&gt; &lt;/div&gt; &lt;div class="divContent"&gt; &lt;div id="divTip"&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/body&gt; &lt;/html&gt; </pre> <p> UserInfo.jsp</p> <p> </p> <pre name="code" class="html">&lt;%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&gt; &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;My JSP 'UserInfo.jsp' starting page&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;% request.setCharacterEncoding("UTF-8"); String strName=request.getParameter("name"); String strSex=request.getParameter("sex"); String strHTML="&lt;DIV CLASS='clsShow'&gt;";//初始化保存内容变量 if(strName.equals("tom") &amp;&amp; strSex.equals("man")) { strHTML+="姓名:tom&lt;br/&gt;性别:man&lt;br/&gt;邮箱:abc@gmail.com&lt;br/&gt;&lt;hr/&gt;"; } strHTML+="&lt;/div&gt;"; response.setCharacterEncoding("text/html;charset=UTF-8"); response.setContentType("text/html;charset=UTF-8"); response.getWriter().print(strHTML); %&gt; &lt;/body&gt; &lt;/html&gt; </pre>
myeclipse加载报表配置xml文件失败,项目无法正常运行,怎么解决?
![图片说明](https://img-ask.csdn.net/upload/201904/11/1554983047_497110.png) ```<?xml version="1.0" encoding="UTF-8"?> <resources xmlns="http://www.wabacus.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.wabacus.com ../xsd/wabacus.resources.xsd"> <resource key="invalid.isnotempty"> <![CDATA[#label#不能为空]]> </resource> <resource key="invalid.number"> <![CDATA[#data#不是合法数字]]> </resource> <resource key="invalid.age"> <![CDATA[#data#不是有效年龄]]> </resource> <resource key="clickorderbypage1.header"> <![CDATA[<font color='#3366FF'><i> 点击<u>工号</u>、<u>中文名</u>、<u>英文名</u>、<u>性别</u>、<u>年龄</u>、<u>出生日期</u>列的数据标题可以进行排序 </i></font>]]> </resource> <resource key="colselectedpage1.footer"> <![CDATA[<font color='#FF0000'>说明:<font color='#0000FF'> 点击页面中最右边列的向右箭头或“下载Excel”链接,可以选择要显示/下载的列 </font></font>]]> </resource> <resource key="typepromptpage1.header"> <![CDATA[<font color='#3366FF'><i>其中<u>工号</u>查询条件采用任意位置匹配,<u>中文名</u>查询条件采用起始位置匹配</i></font>]]> </resource> <resource key="typepromptpage2.footer"> <![CDATA[<font color='#3366FF'><i>其中<u>工号</u>查询条件采用任意位置匹配,<u>姓名</u>查询条件采用起始位置匹配</i></font>]]> </resource> <resource key="typepromptpage3.footer"> <![CDATA[<font color='#3366FF'><i>其中<u>工号</u>提示列采用任意位置匹配,<u>中文名</u>提示列采用起始位置匹配</i></font>]]> </resource> <resource key="rowselectpage2.report1.footer"> <![CDATA[<font color='#3366FF'><i>通过按住Ctrl键或Shift键用鼠标点击记录行进行多选</i></font>]]> </resource> <resource key="masterslavepage3.report1.header"> <![CDATA[<font color='#3366FF'><i>点击“部门编号”查看部门员工列表,点击“部门名称”查看部门详细资料</i></font>]]> </resource> <resource key="masterslavepage3_2.report1.footer"> <![CDATA[<font color='#3366FF'><i>点击“部门编号”查看部门员工列表</i></font>]]> </resource> <resource key="masterslavepage3_1.report1.footer"> <![CDATA[<font color='#3366FF'><i>点击“工号”查看员工详细资料</i></font>]]> </resource> <resource key="interceptorpage1.footer"> <![CDATA[<font color='#3366FF'><i> 1、访问报表时查看服务器控制台,通过<report/>的子标签<interceptor/>中配置的拦截器会在控制台中打印信息;<br/> 2、年龄查询条件输入值只能在10到20范围之内,超出后会被前置动作提示出错。 </i></font>]]> </resource> <resource key="interceptorpage2.footer"> <![CDATA[<font color='#3366FF'><i> 1、访问报表时查看服务器控制台,通过<report/>的属性interceptor所引用的在资源文件中定义的拦截器会在控制台中打印信息;<br/> 2、年龄查询条件输入值只能在10到20范围之内,超出后会被前置动作提示出错。 </i></font>]]> </resource> <resource key="interceptorpage3.footer"> <![CDATA[<font color='#3366FF'><i> 1、访问报表时查看服务器控制台,通过<report/>的属性interceptor所引用的拦截器JAVA类会在控制台中打印信息;<br/> 2、年龄查询条件输入值只能在10到20范围之内,超出后会被前置动作提示出错。 </i></font>]]> </resource> <resource key="title.label">员工信息列表</resource> <resource key="sequence.label">序号</resource> <resource key="no.label">工号</resource> <resource key="group.label">个人信息</resource> <resource key="name.label">姓名</resource> <resource key="sex.label">性别</resource> <resource key="age.label">年龄</resource> <resource key="birthday.label">出生日期</resource> <resource key="salary.label">工资</resource> <resource key="joinindate.label">入职日期</resource> <resource key="condition.txtno.label">工号</resource> <resource key="condition.txtage.label">年龄</resource> <resource key="l10npage.report1.footer"> <![CDATA[<font color='#3366FF'><i> 1、这里演示的是静态配置信息的本地化,对于从数据库取出的动态数据,如果要进行本地化,请参看《Wabacus框架入门与提高》文档<br/> 2、为两个查询条件都配置了校验,校验出错信息也支持本地化,校验规则与上面“客户端/服务器端校验”演示的报表一致。 </i></font>]]> </resource> <resource key="otherpage3.report1.header"> <![CDATA[ <a href="#" onclick="viewSelectedRadioValues();">查看“选择一”列选中值</a>&nbsp;|&nbsp;<a href="#" onclick="viewSelectedCheckboxValues();">查看“选择二”列选中值</a> ]]> </resource> <resource key="otherpage4_2.report1.footer"> <![CDATA[<br/><br/><font color='#3366FF'><i> 这里演示的功能按钮只是测试,虽然是“添加”或“修改”按钮,但不能对报表数据进行编辑,关于数据编辑功能的演示,请参看“数据编辑篇” </i></font>]]> </resource> <resource key="reportborderlistpage1.report5.footer"> <![CDATA[<br/><font color='red'> 注意:通过<report/>标签的bordercolor属性只能改变数据部分表格的边框颜色,如果要同时改变标题部分和外层表格的边框颜色,则需要通过修改 wabacus_system.css文件中的.cls-data-th-list、.cls-data-td-list的样式定义实现。 </font>]]> </resource> <resource key="cellresizepage.report1.header"> <![CDATA[<br/><font color='#FF0000'> 请将鼠标放在数据标题列各单元格之间进行左右移动,调整列宽</font> </font>]]> </resource> <resource key="cellresizepage.report2.footer"> <![CDATA[<br/><font color='#3366FF'> <b>说明:</b>对于复杂表头的报表,只能对顶层分组所在单元格以及没有参与列分组的列所在单元格进行移动,比如在这复杂表头报表中:<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="red">“工号”、“年龄”、“入职日期”三列</font>属于没有参与列分组的列,所以可以对它们所在单元格进行移动;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="red">“基本信息”分组</font>属于顶层分组,因为它不属于哪个分组的子分组,所以也可以对它所在单元格进行移动;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="red">“中文名”、“英文名”、“性别”三列</font>是参与了列分组的列,所以不能对它们所在单元格进行移动;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="red">“姓名”分组</font>不是顶层分组,因为它是父分组“基本信息”的一部分,所以不能对它所在单元格进行移动。 </font>]]> </resource> <resource key="celldragpage1.header"> <![CDATA[<br/><font color='#FF0000'> 请将鼠标放在数据标题列,点击后进行拖动</font> </font>]]> </resource> <resource key="interceptorpage2.report1.interceptor" type="com.wabacus.config.resource.InterceptorRes"> <interceptor> <imports> <import>com.wabacus.util.*</import> <import>java.util</import> </imports> <preaction> <![CDATA[ String age=rrequest.getStringAttribute("txtage",""); if(!age.equals("")) { try { int iage=Integer.parseInt(age); if(iage<10||iage>20) { rrequest.getWResponse().getMessageCollector().alert("输入的年龄:"+age+"起出范围,只能输入10到20之间的数字",null,true); } }catch(NumberFormatException nfe) { rrequest.getWResponse().getMessageCollector().alert("输入的年龄:"+age+"不是合法数字",null,true); } } System.out.println(new Date()+":::执行完前置动作------------------"); ]]> </preaction> <postaction> <![CDATA[ System.out.println(new Date()+":::执行完后置动作-------------------"); ]]> </postaction> </interceptor> </resource> <!-- --> <resource key="editablelistreportpage1.footer"> <![CDATA[<br/><br/><font color='#3366FF'><i> “省”、“市”、“县”三列为下拉框,且是关联下拉框</i></font>]]> </resource> <resource key="editabledetailpage2.footer"> <![CDATA[<br/><br/></br> <font color='#ff0000'>注意:</font><br/>&nbsp;&nbsp;&nbsp;&nbsp;<font color='#3366FF'> 1、在这种编辑方式中需要先点击“修改”按钮才能修改数据;<br/><br/> &nbsp;&nbsp;&nbsp;&nbsp; 2、因为此报表的“简介”列是大字段类型,如果是Oracle数据库,且采用的不是oracle10g的jdbc驱动,则可能不能正常的完成添加操作,需要将配置文件中此报表的 <insert/>标签配置的SQL语句:insert into ...后面加上where deptno=@{deptno__old},即变为如下形式: insert into tbl_department(guid=uuid{},@{deptno},@{deptname},@{manager},@{builtdate},@{performance},@{description}) where deptno=@{deptno__old};然后重新启动即可。 </font>]]> </resource> <resource key="editpartcolpage1.footer"> <![CDATA[<br/><br/></br> <font color='#ff0000'>说明:</font><br/>&nbsp;&nbsp;&nbsp;&nbsp;<font color='#3366FF'> 1、修改数据时:“工号”、“姓名”、“所属部门”三列不允许修改<br/> &nbsp;&nbsp;&nbsp;&nbsp; 2、添加数据时,“性别”、“出生日期”两列不允许添加 </font>]]> </resource> <resource key="coldefaultvaluepage1.report1.footer"> <![CDATA[<br/><br/></br> <font color='#ff0000'>说明:</font><br/><font color='#0000FF'> &nbsp;&nbsp;&nbsp;&nbsp;“姓名”列默认值为“无名”;<br/> &nbsp;&nbsp;&nbsp;&nbsp;“年龄”列默认值为60;<br/> &nbsp;&nbsp;&nbsp;&nbsp;“出生日期”列默认值为1980-09-23<br/> &nbsp;&nbsp;&nbsp;&nbsp;“工资”列默认值为1000<br/> &nbsp;&nbsp;&nbsp;&nbsp;“省”列默认值为广东<br/> &nbsp;&nbsp;&nbsp;&nbsp;“市”列默认值为深圳<br/> &nbsp;&nbsp;&nbsp;&nbsp;“县”列默认值为福田<br/> </font>]]> </resource> <resource key="inputboxdefaultvaluepage1.report1.footer"> <![CDATA[<br/><br/></br> <font color='#ff0000'>说明:</font><br/><font color='#0000FF'> &nbsp;&nbsp;&nbsp;&nbsp;“姓名”列的输入框默认值为“无名”;<br/> &nbsp;&nbsp;&nbsp;&nbsp;“年龄”列的输入框默认值为60;<br/> &nbsp;&nbsp;&nbsp;&nbsp;“出生日期”列的输入框默认值为1980-09-23<br/> &nbsp;&nbsp;&nbsp;&nbsp;“工资”列的输入框默认值为1000<br/> &nbsp;&nbsp;&nbsp;&nbsp;“省”列的输入框默认值为广东<br/> &nbsp;&nbsp;&nbsp;&nbsp;“市”列的输入框默认值为深圳<br/> &nbsp;&nbsp;&nbsp;&nbsp;“县”列的输入框默认值为福田<br/> </font>]]> </resource> <resource key="editablemasterslavepage1.report3.footer"> <![CDATA[<br/><br/> <font color='#ff0000'>说明:</font><br/><font color='#0000FF'> &nbsp;&nbsp;&nbsp;&nbsp; 1、“详细资料1”和“详细资料2”两个细览报表是两种不同编辑方式的细览报表,它们都依赖于“员工信息列表”报表。<br/> &nbsp;&nbsp;&nbsp;&nbsp; 2、“详细资料1”和“详细资料2”两个细览报表均配置为不允许修改“工号”列,其它列均允许修改。 </font>]]> </resource> <resource key="editableFormatListPage1.footer"> <![CDATA[<br/><br/><font color='#ff0000'>说明:</font><font color='#0000FF'>&nbsp;&nbsp;在只读模式时,将此报表的“工号”列格式化为一个超链接</font>]]> </resource> <resource key="editableFormatDetailPage1.footer"> <![CDATA[<br/><br/><font color='#ff0000'>说明:</font><font color="#0000ff">使用只读访问模式访问时将“部门编号”列格式化为一个超链接,使用默认访问模式时,将“部门经理”列格式化为一超链接</font>]]> </resource> <resource key="editableFormatDetailPage2.footer"> <![CDATA[<br/><br/><font color='#ff0000'>说明:</font><font color="#0000ff"> 使用只读访问模式访问时将“部门编号”列格式化为一个超链接,如果是添加记录模式,为部门编号赋默认值111111</font>]]> </resource> <resource key="savecallbackpage2.footer"> <![CDATA[<br/><br/> <font color='#ff0000'>说明:</font><br/><font color='#0000FF'> &nbsp;&nbsp;此报表配置了一个保存回调函数打印保存的数据,并且声明执行完此回调函数后不更新报表页面的显示,<br/> &nbsp;&nbsp;这对于保存后跳转到新页面比较有用,可以提高性能,因为这种情况没必要更新页面显示。 </font>]]> </resource> <resource key="popupsinglepage1.report1.footer"> <![CDATA[<br/> <font color='#ff0000'>说明:</font><font color='#0000FF'> “兴趣爱好”列为弹出输入框窗口编辑框 </font>]]> </resource> <resource key="popupmultiplypage1.report1.footer"> <![CDATA[<br/> <font color='#ff0000'>说明:</font><font color='#0000FF'> 通过弹出窗口选择了“兴趣爱好”列的值后,会同时设置“姓名”列和“部门”列的值 </font>]]> </resource> <resource key="pageinterceptorpage1.footer"> <![CDATA[<br/> <font color='#ff0000'>说明:</font><font color='#0000FF'> 访问页面或操作页面上报表时,请查看控制台上各拦截器的打印信息,可以了解到不同类型、不同位置上的页面拦截器各方法的执行顺序 </font>]]> </resource> <resource key="fileuploadlistpage1.report1.footer"> <![CDATA[<br/> <font color='#ff0000'>说明:</font><br/> <font color='#0000FF'> &nbsp;&nbsp;1、“图片文件上传”是指上传后以<img/>标签显示出来的上传类型。<br/> &nbsp;&nbsp;2、如果要测试这里的文件上传功能,请先修改此报表配置中为此列配置的上传路径到合适路径 </font>]]> </resource> <resource key="fileuploadlistpage1.report2.footer"> <![CDATA[<br/> <font color='#ff0000'>说明:</font><br/><font color='#0000FF'> &nbsp;&nbsp;1、“WEB文件上传”是指上传后能通过URL在浏览器中访问到,Wabacus框架在上传这种类型的文件时,会根据用户配置的rooturl属性构造出此文件的访问URL;<br/> &nbsp;&nbsp;2、如果要测试这里的文件上传功能,请先修改此报表配置中为此列配置的上传路径到合适路径 </font>]]> </resource> <resource key="fileuploadlistpage1.report3.footer"> <![CDATA[<br/> <font color='#ff0000'>说明:</font><br/><font color='#0000FF'> &nbsp;&nbsp;1、“普通文件上传”就是指一般的文件上传功能,Wabacus框架上传这种类型的文件时,会在上传后返回被上传文件在服务器中的绝对路径; &nbsp;&nbsp;2、如果要测试这里的文件上传功能,请先修改此报表配置中为此列配置的上传路径到合适路径 </font>]]> </resource> <resource key="fileuploadlistpage1.report4.footer"> <![CDATA[<br/> <font color='#ff0000'>说明:</font><font color='#0000FF'> “上传后文件改名”对上面三种类型的文件上传操作都有效,是指将文件上传到服务器后,框架自动对文件进行更名。<br/> &nbsp;&nbsp;更名的类型包括如下几种:<br/> &nbsp;&nbsp;&nbsp;&nbsp;1、常量字符串;<br/> &nbsp;&nbsp;&nbsp;&nbsp;2、{date}:以当前日期做为文件名;<br/> &nbsp;&nbsp;&nbsp;&nbsp;3、{time}:以当前时间做为文件名;<br/> &nbsp;&nbsp;&nbsp;&nbsp;4、{timestamp}:以当前日期时间的毫秒数做为文件名,可以保持每次上传的文件名不重复。 </font>]]> </resource> <resource key="clobpage1.footer"> <![CDATA[<br/><font color='#ff0000'>说明:</font><font color='#0000FF'>“简介”列即为大字符串类型字段。</font>]]> </resource> <resource key="formpartcoldetail1.footer"> <![CDATA[<br/><font color='#ff0000'>说明:</font><br/> <font color='#0000FF'> &nbsp;&nbsp;编辑时,“婚否”、“工资”、“所属部门”三列不允许修改;<br/> &nbsp;&nbsp;添加时,“英文名”、“入职日期”两列不允许输入数据 </font>]]> </resource> <resource key="formpartcollistpage1.footer"> <![CDATA[<br/><font color='#ff0000'>说明:</font><br/> <font color='#0000FF'> &nbsp;&nbsp;编辑时,“所属部门”、“省”、“市”、“县”四列不允许修改;<br/> &nbsp;&nbsp;添加时,“姓名”、“性别”两列不允许输入数据 </font>]]> </resource> <resource key="formcallbackdetailpage1.header"> <![CDATA[<br/><font color='#ff0000'>注意:</font> <font color='#0000FF'>如果要在照片列进行文件上传,请先修改此报表配置中为此列配置的上传路径到合适路径</font>]]> </resource> <resource key="formcallbacklistpage1.header"> <![CDATA[<br/><font color='#ff0000'>注意:</font> <font color='#0000FF'>如果要在照片列进行文件上传,请先修改此报表配置中为此列配置的上传路径到合适路径</font>]]> </resource> <resource key="masterslavepage1.report2.footer"> <![CDATA[<br/><font color='#ff0000'>说明:</font> <font color='#0000FF'>这里演示的主从关系是当主报表没有数据时,从报表仍然显示出来,这也是默认的主从关系</font>]]> </resource> <resource key="masterslavepage1.report4.footer"> <![CDATA[<br/><font color='#ff0000'>说明:</font> <font color='#0000FF'>这里演示的主从关系是当主报表没有数据时,从报表不显示出来</font>]]> </resource> <resource key="containerpermissionpage12.footer"> <![CDATA[<br/><font color='#ff0000'>说明:</font><font color='#0000FF'>此页面上所有输入框都只读。</font>]]> </resource> <resource key="containerpermissionpage13.footer"> <![CDATA[<br/><font color='#ff0000'>说明:</font><font color='#0000FF'>此页面上所有按钮都禁用,点击无效。</font>]]> </resource> <resource key="containerpermissionpage21.footer"> <![CDATA[<br/><font color='#ff0000'>说明:</font><font color='#0000FF'>此页面上id为“vp1”的容器的标题授权为不显示出来。</font>]]> </resource> <resource key="containerpermissionpage41.footer"> <![CDATA[<br/><font color='#ff0000'>说明:</font><font color='#0000FF'>此页面上id为“tab1”的tabpane容器配置了三个标签页显示三个报表,但第一个和第二个标签页的display权限设置为false,因此只显示了第三个标签页出来。</font>]]> </resource> <resource key="containerpermissionpage42.footer"> <![CDATA[<br/><font color='#ff0000'>说明:</font><font color='#0000FF'>此页面上id为“tab1”的tabpane容器配置了三个标签页显示三个报表,但第二个标签页的disabled权限设置为true,因此不能切换到这个标签页。</font>]]> </resource> <resource key="conditionrelatepage1.footer"> <![CDATA[<br/><font color='#ff0000'>说明:</font> <br><font color='#0000FF'>&nbsp;&nbsp;此页面共包括三个报表,其中报表一、报表二、报表三的“工号”查询条件关联,因为它们的此条件的name属性都是txtno</font> <br><font color='#0000FF'>&nbsp;&nbsp;报表一、报表三的“姓名”查询条件关联,因为它们的此条件的name属性都是txtname,但与报表二的“姓名”查询条件不关联,因为它的此查询条件的name为txtname1。</font> <br><font color='#0000FF'>&nbsp;&nbsp;报表一、报表三的“性别”查询条件不关联,因为它们的此条件的name属性不同</font> ]]> </resource> <resource key="Interceptor_saveinterceptorreport" type="com.wabacus.config.resource.InterceptorRes"> <interceptor> <imports> <import>java.util.*</import> </imports> <saveaction> <![CDATA[ List lstInsertData=rrequest.getLstInsertedData(rbean);//添加的记录集合 List lstInsertExternalVals=rrequest.getLstInsertedParamValues(rbean);//因为此报表为<insert/>配置了<external-values/> List lstUpdateData=rrequest.getLstUpdatedData(rbean);//修改的记录集合 List lstDeleteData=rrequest.getLstDeletedData(rbean);//删除的记录集合 if(lstInsertData!=null&&lstInsertData.size()>0||lstUpdateData!=null&&lstUpdateData.size()>0||lstDeleteData!=null&&lstDeleteData.size()>0) { System.out.println("--------------拦截器类型:资源项----------保存前置动作-------------------"); } Map mData; if(lstInsertData!=null&&lstInsertData.size()>0) {//当前在做添加数据的保存操作 Map mParamValues; for(int i=0;i<lstInsertData.size();i++) {//循环添加的每条记录 mData=(Map)lstInsertData.get(i); mParamValues=(Map)lstInsertExternalVals.get(i); if(mData==null) continue; System.out.println("第"+(i+1)+"条添加的记录:"); Iterator itKeys=mData.keySet().iterator(); while(itKeys.hasNext()) { String key=(String)itKeys.next(); String value=(String)mData.get(key); System.out.print("["+key+"="+value+"]"); } System.out.println(); System.out.println("此条记录对应的<params/>定义的变量值:"); itKeys=mParamValues.keySet().iterator(); while(itKeys.hasNext()) { String key=(String)itKeys.next(); String value=(String)mParamValues.get(key); System.out.print("["+key+"="+value+"]"); } System.out.println(); } } if(lstUpdateData!=null&&lstUpdateData.size()>0) {//当前在做修改数据的保存操作 for(int i=0;i<lstUpdateData.size();i++) { mData=(Map)lstUpdateData.get(i); if(mData==null) continue; System.out.println("第"+(i+1)+"条修改的记录:"); Iterator itKeys=mData.keySet().iterator(); while(itKeys.hasNext()) { String key=(String)itKeys.next(); String value=(String)mData.get(key); System.out.print("["+key+"="+value+"]"); } System.out.println(); } } if(lstDeleteData!=null&&lstDeleteData.size()>0) {//当前在做删除数据的保存操作 for(int i=0;i<lstDeleteData.size();i++) { mData=(Map)lstDeleteData.get(i); if(mData==null) continue; System.out.println("第"+(i+1)+"条删除的记录:"); Iterator itKeys=mData.keySet().iterator(); while(itKeys.hasNext()) { String key=(String)itKeys.next(); String value=(String)mData.get(key); System.out.print("["+key+"="+value+"]"); } System.out.println(); } } return super.doSave(rrequest,rbean,editbean); ]]> </saveaction> </interceptor> </resource> <resource key="Interceptor_saveinterceptorperrowpage1" type="com.wabacus.config.resource.InterceptorRes"> <interceptor> <imports> <import>java.util.*</import> </imports> <saveaction-perrow> <![CDATA[ String message=""; ```
c#异步通信代码错误问题
public void ConnectCallback(IAsyncResult ar) { Socket client = (Socket)ar.AsyncState; client.EndConnect(ar); bool connect_flag = false; connect_flag = true; ManualResetEvent connectDone = new ManualResetEvent(false); //连接的信号 connectDone.Set(); } //vs的这段代码中 ,bool connect_flag的connect_flag报了一个警告错误,变量connect_flag已赋值,但是其值从未使用过。如何修改? public static MODEL.DataSourceVersionQuery BrowseDataSource_QueryVersionData() { MODEL.DataSourceVersionQuery result = new MODEL.DataSourceVersionQuery(); //获取数据包 string strPacket = BrowseDataSource_PrepareVersionPacket(); //向服务端提交查询版本信息 string str = DAL.socket.GetSocketData(strPacket); //DAL.socket.GetSocketData(strPacket) vs报了一个错误,非静态字段、方法或属性DAL.socket.GetSocketData(string)“要求对象引用。如何修改? 还有这个错误![图片说明](https://img-ask.csdn.net/upload/201509/16/1442412249_893824.png) 另外我想把DAL中的socket.cs的 public byte[] bytesReceived { get; set; }这段移动到Model中而不报错要如何修改? DAL中socket完整代码如下: using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; using System.ComponentModel; using System.Data; using System.Windows.Forms; using System.Threading; namespace DAL { /// <summary> /// Socket接口 /// </summary> class socket { //Socket public Socket clientSocket; /// <summary> /// socket连接 /// </summary> /// <returns> /// true 成功 /// false 失败 /// </returns> public bool SocketConnect() { byte[] bytesReceived = new byte[256]; ManualResetEvent connectDone = new ManualResetEvent(false); //连接的信号 ManualResetEvent sendDone = new ManualResetEvent(false); //发送结束 //从配置文件获取IP string SocketIP = DAL.Common.ReadConfigString("Recover", "IP"); //从配置文件获取端口 int SocketPort = Convert.ToInt32(DAL.Common.ReadConfigString("Recover", "Port")); //创建IP地址 IPAddress IP = IPAddress.Parse(SocketIP); try { //创建socket实例 clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //创建网络端点 IPEndPoint ipEnd = new IPEndPoint(IP, SocketPort); //与目标终端连接 clientSocket.BeginConnect(ipEnd, new AsyncCallback(ConnectCallback), clientSocket);//调用回调函数 connectDone.WaitOne(); if (clientSocket.Connected) { return true; } else { return false; } } catch (Exception e) { string strError = ""; strError += "\r\n SocketIP = " + SocketIP.ToString(); strError += "\r\n SocketPort = " + SocketPort.ToString(); DAL.Common.WriteErrorLog(e, strError); return false; } } /// <summary> /// 异步连接的回调函数 /// </summary> /// <param name="ar"></param> public void ConnectCallback(IAsyncResult ar) { Socket client = (Socket)ar.AsyncState; client.EndConnect(ar); bool connect_flag = false; connect_flag = true; ManualResetEvent connectDone = new ManualResetEvent(false); //连接的信号 connectDone.Set(); } /// <summary> /// Socket发送数据 /// </summary> /// <param name="strSend"> /// 数据的内容 /// </param> public void SocketSend(string strSend) { Socket clientSocket; //发送创建套接字 int length = strSend.Length; Byte[] bytesSent = new byte[length]; clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { bytesSent = System.Text.Encoding.Default.GetBytes(strSend); //将字符串指定到指定Byte数组 clientSocket.BeginSend(bytesSent, 0, bytesSent.Length, 0, new AsyncCallback(SendCallback), clientSocket); //异步发送数据 ManualResetEvent sendDone = new ManualResetEvent(false);//发送结束 sendDone.WaitOne(); } catch (Exception e) { string strError = ""; DAL.Common.WriteErrorLog(e, strError); } } public void SendCallback(IAsyncResult ar) //发送的回调函数 { ManualResetEvent sendDone = new ManualResetEvent(false); //发送结束 Socket client = (Socket)ar.AsyncState; int bytesSend = client.EndSend(ar); //完成发送 sendDone.Set(); } /// <summary> /// Socket接收数据 /// </summary> /// <returns> /// 收到的数据 /// </returns> public string SocketReceive() { string result = ""; try { MemoryStream stream = new MemoryStream(); Byte[] bytesReceived = new Byte[256]; clientSocket.BeginReceive(bytesReceived, 0, bytesReceived.Length, 0, new AsyncCallback(ReceiveCallback), clientSocket); ManualResetEvent sendDone = new ManualResetEvent(false); //发送结束 sendDone.WaitOne(); } catch (Exception e) { string strError = ""; DAL.Common.WriteErrorLog(e, strError); } return result; } public void ReceiveCallback(IAsyncResult ar) { Socket client = (Socket)ar.AsyncState; //获取句柄 int bytesread = client.EndReceive(ar); if (bytesread > 0) { clientSocket.BeginReceive(bytesReceived, 0, bytesReceived.Length, 0, new AsyncCallback(ReceiveCallback), client); string content = Encoding.ASCII.GetString(bytesReceived, 0, bytesReceived.Length); } else { ManualResetEvent readDone = new ManualResetEvent(false); //读信号 readDone.Set(); } } /// <summary> /// Socket通信 /// </summary> /// <param name="strSend"> /// 发送的信息 /// </param> /// <returns> /// 包体的内容 /// </returns> public string GetSocketData(string strSend) { string strDatas = ""; string strResult = ""; string strExtLength = ""; try { //Socket连接 SocketConnect(); //发送信息 SocketSend(strSend); //接收服务器的信息 strResult = SocketReceive(); //获取扩展信息的长度 strExtLength = strResult.Substring(16, 12); int ExtLength = Convert.ToInt32(strExtLength); //扩展信息,暂不使用 //string strExtInfo = strResult.Substring(32, ExtLength); //获取包体的内容 strDatas = strResult.Substring(ExtLength + 32); //strDatas = decodedString; } catch (Exception e) { string strError = ""; strError += "\r\n strResult = " + strResult; strError += "\r\n strExtLength = " + strExtLength; DAL.Common.WriteErrorLog(e, strError); strDatas = ""; } return strDatas; } public string SocketReceiveFile(string FileName) { string result = ""; try { MemoryStream streamPacketLength = new MemoryStream(); Byte[] bytesPacketLength = new Byte[16]; clientSocket.Receive(bytesPacketLength, bytesPacketLength.Length, 0); streamPacketLength.Write(bytesPacketLength, 0, bytesPacketLength.Length); result = System.Text.Encoding.Default.GetString(streamPacketLength.ToArray()); int PacketLength = Convert.ToInt32(result); streamPacketLength.Close(); MemoryStream streamExtLength = new MemoryStream(); Byte[] bytesExtLength = new Byte[12]; clientSocket.Receive(bytesExtLength, bytesExtLength.Length, 0); streamExtLength.Write(bytesExtLength, 0, bytesExtLength.Length); result = System.Text.Encoding.Default.GetString(streamExtLength.ToArray()); int ExtLength = Convert.ToInt32(result); streamExtLength.Close(); MemoryStream streamProtocol = new MemoryStream(); Byte[] bytesProtocol = new Byte[4]; clientSocket.Receive(bytesProtocol, bytesProtocol.Length, 0); streamProtocol.Write(bytesProtocol, 0, bytesProtocol.Length); result = System.Text.Encoding.Default.GetString(streamProtocol.ToArray()); string Protocol = result; streamProtocol.Close(); MemoryStream streamExtInfo = new MemoryStream(); Byte[] bytesExtInfo = new Byte[ExtLength]; clientSocket.Receive(bytesExtInfo, bytesExtInfo.Length, 0); streamExtInfo.Write(bytesExtInfo, 0, bytesExtInfo.Length); result = System.Text.Encoding.Default.GetString(streamExtInfo.ToArray()); byte[] Buffer = Convert.FromBase64String(result); string strExtInfo = UTF8Encoding.UTF8.GetString(Buffer); streamExtInfo.Close(); MODEL.FileTrackQuery ExtInfo = new MODEL.FileTrackQuery(); ExtInfo = JsonConvert.DeserializeObject<MODEL.FileTrackQuery>(strExtInfo); if (ExtInfo.code == "00") { FileInfo fi = new FileInfo(FileName); DirectoryInfo di = fi.Directory; if (!di.Exists) { di.Create(); } FileStream streamPacketInfo = new FileStream(FileName, FileMode.Create); if (PacketLength > 0) { Byte[] bytesPacketInfo = new Byte[PacketLength]; int bytes = 0; do { bytes = clientSocket.Receive(bytesPacketInfo, bytesPacketInfo.Length, 0); streamPacketInfo.Write(bytesPacketInfo, 0, bytes); } while (bytes > 0); } streamPacketInfo.Close(); } clientSocket.Close(); string strLogFile = System.AppDomain.CurrentDomain.BaseDirectory + "debug.txt"; StreamWriter sw = new StreamWriter(strLogFile, true); sw.WriteLine("PacketLength : " + PacketLength.ToString()); sw.WriteLine("ExtLength : " + ExtLength.ToString()); sw.WriteLine("strExtInfo : " + strExtInfo); sw.WriteLine("ExtInfo.code : " + ExtInfo.code); sw.WriteLine("\n------------------------------------------------------------------------\n"); sw.Flush(); sw.Close(); } catch (Exception e) { string strError = ""; DAL.Common.WriteErrorLog(e, strError); } return result; } public string GetSocketFile(string strSend, string FileName) { string strDatas = ""; string strResult = ""; string strExtLength = ""; try { //Socket连接 SocketConnect(); //发送信息 SocketSend(strSend); //接收服务器的信息 strResult = SocketReceiveFile(FileName); //获取扩展信息的长度 //strExtLength = strResult.Substring(16, 12); //int ExtLength = Convert.ToInt32(strExtLength); //扩展信息,暂不使用 //string strExtInfo = strResult.Substring(32, ExtLength); //获取包体的内容 //strDatas = strResult.Substring(ExtLength + 32); } catch (Exception e) { string strError = ""; strError += "\r\n strResult = " + strResult; strError += "\r\n strExtLength = " + strExtLength; DAL.Common.WriteErrorLog(e, strError); strDatas = ""; } return strDatas; } public byte[] bytesReceived { get; set; } } } MODEL完整代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MODEL { public enum ClientEditionEnum { Enterprise,//企业版 Personal,//个人版 Internal,//内部版 None,//error } /// <summary> /// 授权文件内容 /// </summary> public class AuthorizeFileInfo { public string startTime { get; set; } public string expiryTime { get; set; } public string licenseID { get; set; } public string licensePassword { get; set; } public string terminalID { get; set; } public string customName { get; set; } public string customID { get; set; } public AuthorizeFileInfo() { startTime = ""; expiryTime = ""; licenseID = ""; licensePassword = ""; terminalID = ""; customName = ""; customID = ""; } } /// <summary> /// 通用返回值 /// </summary> /// public class CommonResult { public string code { get; set; } public string message { get; set; } public CommonResult() { code = ""; message = ""; } } public class EnterpriseConfirmAuthorizeDatas { public string sessionID { get; set; } public EnterpriseConfirmAuthorizeDatas() { sessionID = ""; } } /// <summary> /// 企业版授权校验接口 /// </summary> public class EnterpriseConfirmAuthorizeResult { public string code { get; set; } public string message { get; set; } public EnterpriseConfirmAuthorizeDatas datas { get; set; } public EnterpriseConfirmAuthorizeResult() { code = ""; message = ""; datas = new EnterpriseConfirmAuthorizeDatas(); } } public class PersonalConfirmAuthorizeDatas { public string sessionID { get; set; } public string licenseInfo { get; set; } public PersonalConfirmAuthorizeDatas() { sessionID = ""; licenseInfo = ""; } } /// <summary> /// 个人版授权校验接口 /// </summary> public class PersonalConfirmAuthorizeResult { public string code { get; set; } public string message { get; set; } public PersonalConfirmAuthorizeDatas datas { get; set; } public PersonalConfirmAuthorizeResult() { code = ""; message = ""; datas = new PersonalConfirmAuthorizeDatas(); } } /// <summary> /// 鉴权信息,每次调用安全接口时使用 /// </summary> public class LicInfo { public string licenseID { get; set; } public string licensePassword { get; set; } public string terminalID { get; set; } public string deviceID { get; set; } public string sessionID { get; set; } public LicInfo() { licenseID = ""; licensePassword = ""; terminalID = ""; deviceID = ""; sessionID = ""; } } /// <summary> /// java引擎的参数 /// </summary> public class JavaEngineArg { public string licenseID { get; set; } public string licensePassword { get; set; } public string terminalID { get; set; } public string customName { get; set; } public string customID { get; set; } public string deviceID { get; set; } public JavaEngineArg() { licenseID = ""; licensePassword = ""; terminalID = ""; customName = ""; customID = ""; deviceID = ""; } } /// <summary> /// 用户登录接口(一),非安全接口 /// </summary> /// public class UserInfoUnSafe { public string userID { get; set; } public string userName { get; set; } public string departmentName { get; set; } public UserInfoUnSafe() { userID = ""; userName = ""; departmentName = ""; } } public class UserLoginUnSafe { public string code { get; set; } public string message { get; set; } public UserInfoUnSafe datas { get; set; } public UserLoginUnSafe() { code = ""; message = ""; datas = new UserInfoUnSafe(); } } /// <summary> /// 个人版用户登录接口,非安全接口 /// </summary> /// public class UserInfoForPersonal { public string userID { get; set; } public string userName { get; set; } public string departmentName { get; set; } public string licenseInfo { get; set; } public UserInfoForPersonal() { userID = ""; userName = ""; departmentName = ""; licenseInfo = ""; } } public class UserLoginForPersonal { public string code { get; set; } public string message { get; set; } public UserInfoForPersonal datas { get; set; } public UserLoginForPersonal() { code = ""; message = ""; datas = new UserInfoForPersonal(); } } /// <summary> /// 用户登录接口(二),安全接口 /// </summary> /// public class UserInfoSafe { public string userSessionID { get; set; } public string userID { get; set; } public string userName { get; set; } public string departmentName { get; set; } public string activeTime { get; set; } public UserInfoSafe() { userSessionID = ""; userID = ""; userName = ""; departmentName = ""; activeTime = ""; } } public class UserLoginSafe { public string code { get; set; } public string message { get; set; } public UserInfoSafe datas { get; set; } public UserLoginSafe() { code = ""; message = ""; datas = new UserInfoSafe(); } } /// <summary> /// 更新检查接口 /// </summary> /// public class SingleVersion { public string softID { get; set; } public int version { get; set; } public SingleVersion() { softID = ""; version = new int(); } } public class Versions { public List<SingleVersion> versions { get; set; } public Versions() { versions = new List<SingleVersion>(); } } public class VersionUpdate { public string softID { get; set; } public int version { get; set; } public string url { get; set; } public VersionUpdate() { softID = ""; version = new int(); url = ""; } } public class VersionCheck { public string code { get; set; } public string message { get; set; } public List<VersionUpdate> datas { get; set; } public VersionCheck() { code = ""; message = ""; datas = new List<VersionUpdate>(); } } /// <summary> /// 数据源信息查询接口 /// </summary> /// public class OptInfoQuery { public string createUserID { get; set; } public string createUserName { get; set; } public string createUserTime { get; set; } public OptInfoQuery() { createUserID = ""; createUserName = ""; createUserTime = ""; } } public class Period { public int cycle { get; set; } public int cycleUnit { get; set; } public string timer { get; set; } public Period() { cycle = 1; cycleUnit = 1; timer = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); } } public class StrategyConfig { public int backType { get; set; } public int taskType { get; set; } public Period config { get; set; } public StrategyConfig() { backType = 0; taskType = 1; config = new Period(); } } public class FilterFileSuffix { public string suffix { get; set; } public FilterFileSuffix() { suffix = ""; } } public class Scan { public int scanType { get; set; } public string root { get; set; } public bool scanHideFile { get; set; } public string verifyCompleteName { get; set; } public int verifyCompleteMaxCount { get; set; } public int verifyCompleteTimer { get; set; } public string fileAttrGainer { get; set; } public bool recordCanNotReadFileInfo { get; set; } public bool recordEmptyDirectory { get; set; } public bool recordEmptyFile { get; set; } public List<FilterFileSuffix> filterFileSuffix { get; set; } public Scan() { scanType = 2; root = ""; scanHideFile = false; verifyCompleteName = ""; verifyCompleteMaxCount = 5; verifyCompleteTimer = 10000; fileAttrGainer = "null"; recordCanNotReadFileInfo = false; recordEmptyDirectory = false; recordEmptyFile = false; filterFileSuffix = new List<FilterFileSuffix>(); } } public class DataSourceConfigQuery { public int status { get; set; } public int dataSourceType { get; set; } public string dataSourceID { get; set; } public string dataSourceName { get; set; } public string dataSourceDescription { get; set; } public Scan config { get; set; } public DataSourceConfigQuery() { status = 0; dataSourceType = 0; dataSourceID = ""; dataSourceName = ""; dataSourceDescription = ""; config = new Scan(); } } public class DatasQuery { public OptInfoQuery optInfo { get; set; } public StrategyConfig strategyConfig { get; set; } public DataSourceConfigQuery dataSourceConfig { get; set; } public DatasQuery() { optInfo = new OptInfoQuery(); strategyConfig = new StrategyConfig(); dataSourceConfig = new DataSourceConfigQuery(); } } public class DataSourceInfoQuery { public string code { get; set; } public string message { get; set; } public List<DatasQuery> datas { get; set; } public DataSourceInfoQuery() { code = ""; message = ""; datas = new List<DatasQuery>(); } } public class WebSite { public string ExpirationTime { get; set; } public string WebSiteSpace { get; set; } public bool DataBaseEnable { get; set; } public string DataBaseUserName { get; set; } public string DataBasePassword { get; set; } public string DataBaseMark { get; set; } public string WebSiteAdmin { get; set; } public string WebSitePassword { get; set; } public WebSite() { ExpirationTime = ""; WebSiteSpace = ""; DataBaseEnable = false; DataBaseUserName = ""; DataBasePassword = ""; DataBaseMark = ""; WebSiteAdmin = ""; WebSitePassword = ""; } } public class WebSiteDatasQuery { public OptInfoQuery optInfo { get; set; } public StrategyConfig strategyConfig { get; set; } public DataSourceConfigQuery dataSourceConfig { get; set; } public WebSite webSiteConfig { get; set; } public WebSiteDatasQuery() { optInfo = new OptInfoQuery(); strategyConfig = new StrategyConfig(); dataSourceConfig = new DataSourceConfigQuery(); webSiteConfig = new WebSite(); } } public class WebSiteDataSourceInfoQuery { public string code { get; set; } public string message { get; set; } public List<WebSiteDatasQuery> datas { get; set; } public WebSiteDataSourceInfoQuery() { code = ""; message = ""; datas = new List<WebSiteDatasQuery>(); } } /// <summary> /// 新增数据源接口 /// </summary> /// public class OptInfoNew { public bool forceFlag { get; set; } public OptInfoNew() { forceFlag = true; } } public class DataSourceConfigNew { public int dataSourceType { get; set; } public string dataSourceName { get; set; } public string dataSourceDescription { get; set; } public Scan config { get; set; } public DataSourceConfigNew() { dataSourceType = 0; dataSourceName = ""; dataSourceDescription = ""; config = new Scan(); } } public class DataSourceNew { public OptInfoNew optInfo { get; set; } public StrategyConfig strategyConfig { get; set; } public DataSourceConfigNew dataSourceConfig { get; set; } public DataSourceNew() { optInfo = new OptInfoNew(); strategyConfig = new StrategyConfig(); dataSourceConfig = new DataSourceConfigNew(); } } /// <summary> /// 修改数据源接口 /// </summary> /// public class DataSourceModify { public StrategyConfig strategyConfig { get; set; } public DataSourceConfigQuery dataSourceConfig { get; set; } public DataSourceModify() { strategyConfig = new StrategyConfig(); dataSourceConfig = new DataSourceConfigQuery(); } } /// <summary> /// 停用/启用数据源接口 /// </summary> /// public class DataSourceStatus { public string dataSourceID { get; set; } public int optType { get; set; } public DataSourceStatus() { dataSourceID = ""; optType = new int(); } } /// <summary> /// 数据源数据,仅用于存放数据 /// </summary> /// public class DataSourceData { public List<DatasQuery> datas { get; set; } public DataSourceData() { datas = new List<DatasQuery>(); } } /// <summary> /// WebSite数据源数据,仅用于存放数据 /// </summary> /// public class WebSiteDataSourceData { public List<WebSiteDatasQuery> datas { get; set; } public WebSiteDataSourceData() { datas = new List<WebSiteDatasQuery>(); } } /// <summary> /// 文件恢复,版本查询 /// </summary> /// public class DataSourceVersionArg { // 通讯令牌 public string secretKey { get; set; }//由token进过MD5->BASE64->MD5获得 // 任务令牌 public string token { get; set; }//客户端生成一个UUID // 前置机编号 public string terminalId { get; set; } // 操作用户编号 public string optUserID { get; set; } public DataSourceVersionArg() { secretKey = ""; token = ""; terminalId = ""; optUserID = ""; } } public class FileVersions { public int file_count { get; set; } public long space_size { get; set; } public string task_id { get; set; } public string task_time { get; set; } public int total_count { get; set; } public string version { get; set; } public FileVersions() { file_count = new int(); space_size = new long(); task_id = ""; task_time = ""; total_count = new int(); version = ""; } } public class DataSourceVersion { public Scan datasourceConfig { get; set; } public string datasourceId { get; set; } public string datasourceName { get; set; } public int datasourceStatus { get; set; } public int datasourceType { get; set; } public List<FileVersions> versions { get; set; } public DataSourceVersion() { datasourceConfig = new Scan(); datasourceId = ""; datasourceName = ""; datasourceStatus = new int(); datasourceType = new int(); versions = new List<FileVersions>(); } } /// <summary> /// 查询数据源接口 /// </summary> public class DataSourceVersionQuery { public string code { get; set; } public string message { get; set; } public List<DataSourceVersion> datas { get; set; } public DataSourceVersionQuery() { code = ""; message = ""; datas = new List<DataSourceVersion>(); } } /// <summary> /// 数据源版本信息 /// </summary> public class DataSourceVersionDatas { public List<DataSourceVersion> datas { get; set; } public DataSourceVersionDatas() { datas = new List<DataSourceVersion>(); } } /// <summary> /// 文件恢复,文件信息查询 /// </summary> /// public class QueryFileInfoArg { // 通讯令牌 public string secretKey { get; set; }//由token进过MD5->BASE64->MD5获得 // 任务令牌 public string token { get; set; }//客户端生成一个UUID // 数据源编号 public string datasourceId { get; set; } // 操作用户编号 public string optUserID { get; set; } // 目录文件编号--如果为根目录使用 DS_ROOT public string fileID { get; set; } // 查询的版本编号 如果是综合分析 这个字段设置为 ALL public string taskID { get; set; } public QueryFileInfoArg() { secretKey = ""; token = ""; datasourceId = ""; optUserID = ""; fileID = ""; taskID = ""; } } public class FileInfoCondition { public string datasourceId { get; set; } public string parentId { get; set; } public string taskID { get; set; } public FileInfoCondition() { datasourceId = ""; parentId = ""; taskID = ""; } } public class FileInfo { // 文件唯一编号 public string file_id { get; set; } // 源相对目录 public string file_src_path { get; set; } // 文件名 public string file_name { get; set; } // 文件后缀 public string file_suffix { get; set; } // 是否为文件 public bool is_file { get; set; } // 上级文件编号 public string parent_id { get; set; } // 是否删除 public bool is_del { get; set; } // 是否隐藏 public bool is_hide { get; set; } // 文件大小 public int size { get; set; } // 文件创建时间 public string create_time { get; set; } // 文件创建人 public string create_user { get; set; } // 文件最后修改时间 public string lm_time { get; set; } // 文件最后修改人 public string lm_user { get; set; } // 是否可读 public bool can_read { get; set; } public FileInfo() { file_id = ""; file_src_path = ""; file_name = ""; file_suffix = ""; is_file = new bool(); parent_id = ""; is_del = new bool(); is_hide = new bool(); size = new int(); create_time = ""; create_user = ""; lm_time = ""; lm_user = ""; can_read = new bool(); } } public class FileInfoAndCondition { public FileInfoCondition condition { get; set; } public List<FileInfo> fileInfos { get; set; } public FileInfoAndCondition() { condition = new FileInfoCondition(); fileInfos = new List<FileInfo>(); } } /// <summary> /// 查询文件信息接口 /// </summary> public class FileInfoQuery { public string code { get; set; } public string message { get; set; } public FileInfoAndCondition datas { get; set; } public FileInfoQuery() { code = ""; message = ""; datas = new FileInfoAndCondition(); } } /// <summary> /// 文件信息 /// </summary> public class FileInfoData { public List<FileInfo> datas { get; set; } public FileInfoData() { datas = new List<FileInfo>(); } } public class QueryFileTrackArg { // 通讯令牌 public string secretKey { get; set; }//由token进过MD5->BASE64->MD5获得 // 任务令牌 public string token { get; set; }//客户端生成一个UUID // 文件编号 public string fileID { get; set; } // 操作用户编号 public string optUserID { get; set; } // 查询的版本编号 public string taskID { get; set; } public QueryFileTrackArg() { secretKey = ""; token = ""; fileID = ""; optUserID = ""; taskID = ""; } } public class FileTrack { // 文件操作 public string act_cmd { get; set; } // 是否可读 public bool can_read { get; set; } // 文件创建时间 public string create_time { get; set; } // 文件创建人 public string create_user { get; set; } // 是否删除 public bool is_del { get; set; } // 是否隐藏 public bool is_hide { get; set; } // 文件最后修改时间 public string lm_time { get; set; } // 文件最后修改人 public string lm_user { get; set; } // 文件大小 public int size { get; set; } public string taskID { get; set; } public FileTrack() { act_cmd = ""; can_read = new bool(); create_time = ""; create_user = ""; is_del = new bool(); is_hide = new bool(); lm_time = ""; lm_user = ""; size = new int(); taskID = ""; } } public class FileTrackCondition { public string fileID { get; set; } public string taskID { get; set; } public FileTrackCondition() { fileID = ""; taskID = ""; } } /// <summary> /// 查询文件轨迹接口 /// </summary> public class FileTrackQuery { public string code { get; set; } public string message { get; set; } public FileTrackCondition condition { get; set; } public List<FileTrack> datas { get; set; } public FileTrackQuery() { code = ""; message = ""; condition = new FileTrackCondition(); datas = new List<FileTrack>(); } } /// <summary> /// 文件轨迹 /// </summary> public class FileTrackData { public List<FileTrack> datas { get; set; } public FileTrackData() { datas = new List<FileTrack>(); } } /// <summary> /// 字典item /// </summary> public class DictionaryData { public string version { get; set; } public string task_time { get; set; } public DictionaryData() { version = ""; task_time = ""; } } public class FileRecoverArg { // 通讯令牌 public string secretKey { get; set; }//由token进过MD5->BASE64->MD5获得 // 任务令牌 public string token { get; set; }//客户端生成一个UUID // 操作用户编号 public string optUserID { get; set; } public string fileID { get; set; } public string taskID { get; set; } public string password { get; set; } public FileRecoverArg() { secretKey = ""; token = ""; optUserID = ""; fileID = ""; taskID = ""; password = ""; } } }
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
死磕YOLO系列,YOLOv1 的大脑、躯干和手脚
YOLO 是我非常喜欢的目标检测算法,堪称工业级的目标检测,能够达到实时的要求,它帮我解决了许多实际问题。 这就是 YOLO 的目标检测效果。它定位了图像中物体的位置,当然,也能预测物体的类别。 之前我有写博文介绍过它,但是每次重新读它的论文,我都有新的收获,为此我准备写一个系列的文章来详尽分析它。这是第一篇,从它的起始 YOLOv1 讲起。 YOLOv1 的论文地址:https://www.c...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
20行Python代码爬取王者荣耀全英雄皮肤
引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了。我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成。 准备工作 爬取皮肤本身并不难,难点在于分析,我们首先得得到皮肤图片的url地址,话不多说,我们马上来到王者荣耀的官网: 我们点击英雄资料,然后随意地选择一位英雄,接着F12打开调试台,找到英雄原皮肤的图片...
简明易理解的@SpringBootApplication注解源码解析(包含面试提问)
欢迎关注文章系列 ,关注我 《提升能力,涨薪可待》 《面试知识,工作可待》 《实战演练,拒绝996》 欢迎关注我博客,原创技术文章第一时间推出 也欢迎关注公 众 号【Ccww笔记】,同时推出 如果此文对你有帮助、喜欢的话,那就点个赞呗,点个关注呗! 《提升能力,涨薪可待篇》- @SpringBootApplication注解源码解析 一、@SpringBootApplication 的作用是什...
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给袈...
Python语言高频重点汇总
Python语言高频重点汇总 GitHub面试宝典仓库 回到首页 目录: Python语言高频重点汇总 目录: 1. 函数-传参 2. 元类 3. @staticmethod和@classmethod两个装饰器 4. 类属性和实例属性 5. Python的自省 6. 列表、集合、字典推导式 7. Python中单下划线和双下划线 8. 格式化字符串中的%和format 9. 迭代器和生成器 10...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
ES6基础-ES6的扩展
进行对字符串扩展,正则扩展,数值扩展,函数扩展,对象扩展,数组扩展。 开发环境准备: 编辑器(VS Code, Atom,Sublime)或者IDE(Webstorm) 浏览器最新的Chrome 字符串的扩展: 模板字符串,部分新的方法,新的unicode表示和遍历方法: 部分新的字符串方法 padStart,padEnd,repeat,startsWith,endsWith,includes 字...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
web前端javascript+jquery知识点总结
Javascript javascript 在前端网页中占有非常重要的地位,可以用于验证表单,制作特效等功能,它是一种描述语言,也是一种基于对象(Object)和事件驱动并具有安全性的脚本语言 ,语法同java类似,是一种解释性语言,边执行边解释。 JavaScript的组成: ECMAScipt 用于描述: 语法,变量和数据类型,运算符,逻辑控制语句,关键字保留字,对象。 浏览器对象模型(Br
Qt实践录:开篇
本系列文章介绍笔者的Qt实践之路。
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
一条链接即可让黑客跟踪你的位置! | Seeker工具使用
搬运自:冰崖的部落阁(icecliffsnet) 严正声明:本文仅限于技术讨论,严禁用于其他用途。 请遵守相对应法律规则,禁止用作违法途径,出事后果自负! 上次写的防社工文章里边提到的gps定位信息(如何防止自己被社工或人肉) 除了主动收集他人位置信息以外,我们还可以进行被动收集 (没有技术含量) Seeker作为一款高精度地理位置跟踪工具,同时也是社交工程学(社会工程学)爱好者...
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧...... 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
Python学习笔记(语法篇)
本篇博客大部分内容摘自埃里克·马瑟斯所著的《Python编程:从入门到实战》(入门类书籍),采用举例的方式进行知识点提要 关于Python学习书籍推荐文章 《学习Python必备的8本书》 Python语法特点: 通过缩进进行语句组织 不需要变量或参数的声明 冒号 1 变量和简单数据结构 1.1 变量命名 只能包含字母、数字和下划线,且不能以数字打头。 1.2 字符串 在Python中,用引号...
[Pyhon疫情大数据分析] 一.腾讯实时数据爬取、Matplotlib和Seaborn可视化分析全国各地区、某省各城市、新增趋势
思来想去,虽然很忙,但还是挤时间针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫、可视化分析、GIS地图显示、情感分析、舆情分析、主题挖掘、威胁情报溯源、知识图谱、预测预警及AI和NLP应用等。第一篇文章将分享腾讯疫情实时数据抓取,获取全国各地和贵州省各地区的实时数据,并将数据存储至本地,最后调用Maplotlib和Seaborn绘制中国各地区、贵州省各城市、新增人数的图形。希望这篇可视化分析文章对您有所帮助!
小白也会用的情人节表白神器
鉴于情人节女朋友总说直男,上网找了个模板,改了一下,发现效果还不错。然后又录了一个视频,发现凑合,能用。现在免费分享给程序员,去表白去吧。​​​​​​。当然比较low因为考研没时间优化,懒着优化了。 先看一下效果吧:页面太多了,这里我只放几个页面里面有音乐,还凑合不是太单调。 所有页面最后的合成效果: 接下来教大家如何使用: 新建文件夹:love 然后建立这几个...
论如何用python发qq消息轰炸虐狗好友
因为我的某个好友在情人节的时候秀恩爱,所以我灵光一闪制作了qq消息轰炸并记录了下来。 首先 我的编程环境是: windows 10系统 python3.6 记得要下载win32 pip install win32 思路介绍 其实也非常简单 将要发出去的句子储存在列表中 然后用随机模块调用 将随机出来的元素储存在剪贴板中 连接QQ 找到指定对象 疯狂输出 怎么样,简单吧 开始打代码吧 imp...
情人节闲着无聊写个python程序
用python在图片上写字 ''' 依赖,需要安装Pillow pip install Pillow ''' from PIL import Image, ImageDraw, ImageFont import sys #判断参数个数,可以不要 import os #判断文件是否存在,可以不要 image_path = "1.jpg" font_path = "SIMLI.TTF" tex...
相关热词 c#导入fbx c#中屏蔽键盘某个键 c#正态概率密度 c#和数据库登陆界面设计 c# 高斯消去法 c# codedom c#读取cad文件文本 c# 控制全局鼠标移动 c# temp 目录 bytes初始化 c#
立即提问