网络笔记

TCP建立连接突然RST

  • 有89、27两台主机。主机89向主机27发送了一个SYN,表示希望连接8888端口,主机27回应了主机89一个SYN表示可以连接。但是主机89却很不友好,莫名其妙的发送了一个RST表示我不想连接你了。
  • 后来经过排查发现,在主机89上的程序在建立了socket之后,用setsockopt的SO_RCVTIMEO选项设置了recv的超时时间为100ms。而我们看上面的抓包结果表示,从主机89发出SYN到接收SYN的时间多达110ms。(从15:01:27.799961到15:01:27.961886, 小数点之后的单位是微秒)。因此主机89上的程序认为接收超时,所以发送了RST拒绝进一步发送数据。

编译一个老的mfc项目

当然这项目是不需要界面的

  • 第一步是最简单的,先什么都不加nodejs的内容修改项目中问题正常编译通过后
  • 添加nodejs的接口使能在外面调到c++项目中
    • 添加回调的hello里面已经了解了
    • 现在就是个传参数的问题了 下面的代码就是能传进来两个参数了
1
2
3
4
5
6
7
8
9
10
size_t argc = 2;
napi_value args[2];
status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
assert(status == napi_ok);

if (argc < 2)
{
napi_throw_type_error(env, nullptr, "Wrong number of arguments");
return nullptr;
}
  • 不过添加了这个文件后开始编译报错了
1
2
3
4
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) 已经在 LIBCMTD.lib(new.obj) 中定义
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) 已经在 LIBCMTD.lib(dbgdel.obj) 中定义
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) 已经在 libcpmtd.lib(newaop.obj) 中定义
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) 已经在 LIBCMTD.lib(delete2.obj) 中定义
  • 看到有人说lib的顺序问题
1
2
附加依赖库:uafxcwd.lib;LIBCMTD.lib;
忽略特定默认库:LIBCMTD.lib;uafxcwd.lib
  • 没效果变成报其它的错误了,然后又查又修改反正是各种的错误
  • 最后看到包含文件的问题,我就想到了我现加的接口问题是最先编译的可是没有添加afx.h文件的,然后我在新加的问题中添加了afx.h就能正常的编译通过了
    • nodejs插件里面可以直接打印信息用printf函数
    • 通过 napi_create_buffer 创建buffer这个buffer自动分配内存的要修改值只能通过传出来的指针修改里面的值

拖动的简单示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//代码示例
this.box = new egret.DisplayObjectContainer();
this.box.addEventListener(egret.TouchEvent.TOUCH_BEGIN, this.boxBegin, this);
this.box.addEventListener(egret.TouchEvent.TOUCH_END, this.boxEnd, this);
//添加几个子元素
for(let i=0;i<4;i++){
this.itemList[i] = new sitem((Math.random()*base).toFixed());
this.itemList[i].x = Math.random()*(this.width-90);
this.itemList[i].y = Math.random()*(this.height-90);
this.box.addChild(this.itemList[i]);
}
/** 盒子触摸开始 */
public boxBegin(e:egret.TouchEvent):void{
console.log("boxBegin", e.touchPointID);
for(let i=0;i<this.itemList.length;i++){
if(this.itemList[i].hitTestPoint(e.stageX, e.stageY)){
this.itemList[i].touchId = e.touchPointID;
this.itemList[i].offsetX = e.stageX - this.itemList[i].x;
this.itemList[i].offsetY = e.stageY - this.itemList[i].y;
break;
}
}
this.box.addEventListener(egret.TouchEvent.TOUCH_MOVE, this.boxMove, this);
}
/** 盒子上开始移动 */
public boxMove(e:egret.TouchEvent):void{
console.log("boxmove", e.touchPointID);
for(let i=0;i<this.itemList.length;i++){
if(this.itemList[i].touchId == e.touchPointID){
this.itemList[i].x = e.stageX - this.itemList[i].offsetX;
this.itemList[i].y = e.stageY - this.itemList[i].offsetY;
break;
}
}
}
/** 盒子触摸结束 */
public boxEnd(e:egret.TouchEvent):void{
console.log("boxEnd", e.touchPointID);
for(let i=0;i<this.itemList.length;i++){
if(this.itemList[i].touchId == e.touchPointID){
this.itemList[i].touchId = -1;
//检查是否跟其它数字碰撞
for(let j=0;j<this.itemList.length;j++){
if(j == i) continue;
if(Math.sqrt(Math.pow(this.itemList[i].x-this.itemList[j].x,2) + Math.pow(this.itemList[i].y-this.itemList[j].y,2)) < 90){
console.log("hit", this.itemList[i].getNum(), this.itemList[j].getNum());
}
}
break;
}
//if(this.itemList[i].touchId != -1) return;
}
this.box.removeEventListener(egret.TouchEvent.TOUCH_MOVE, this.boxMove, this);
}