词条 | 从容关闭 |
释义 | 从容关闭即按下菜单键选择关机,或用ALT+F4 SOCKET 编程套接字实现closesocket(client); WSACleanup();//关闭连接 CListBox 实现自动往下滚 m_list.SetCurSel(m_list.GetCount()-1); 10093 int shutdown( __in SOCKET s, __in int how );//使SOCKET对象失去发送和接收对象的能力 根据参数的不同 效果也不懂 当 how 为SD_RECEIVE,SD_SEND,SD_BOTH 分别对作用是 失去 发送,接受,两者都不能的能力 一个完整的断开SOCKET的过程 1. Call WSAAsyncSelect to register for FD_CLOSE notification.// 第一步在用到以Windows消息为基础的网络事件通知的时候才用 2. Call shutdown with how=SD_SEND. 3. When FD_CLOSE received, call recv until zero returned, or SOCKET_ERROR. 4. Call closesocket. WSACleanup 停止使用Winsock 2 DLL (Ws2_32.dll). int WSACleanup(void); printf遇0则结束 shutdown 后 还可以使用该SOCKET if(printf("hello world\"),5<=1,5>2,5<6) 奇怪的if写法 只看最后表达式是否正确 正确后才执行 {}中的语句 创建用户列表(数组)客户端与客户端连接 链接数据库 存储聊天记录 用户信息表 用户名 聊天记录表结构 用户名ID 内容 时间 用户登录情况表 用户名ID 登录时间 登录IP 1、 S启动两个网络侦听,一个叫【主连接】侦听,一个叫【协助打洞】的侦听。 2、 A和B分别与S的【主连接】保持联系。 3、当A需要和B建立直接的TCP连接时,首先连接S的【协助打洞】端口,并发送协助连接申请。同时在该端口号上启动侦听。注意由于要在相同的网络终端上绑定到不同的套接字上,所以必须为这些套接字设置 SO_REUSEADDR 属性(即允许重用),否则侦听会失败。 4、 S的【协助打洞】连接收到A的申请后通过【主连接】通知B,并将A经过NAT-A转换后的公网IP地址和端口等信息告诉B。//每次connect时使用的都是不同的端口 5、 B收到S的连接通知后首先与S的【协助打洞】端口连接,随便发送一些数据后立即断开,这样做的目的是让S能知道B经过NAT-B转换后的公网IP和端口号。/////(同上 多余的吧) 6、 B尝试与A的经过NAT-A转换后的公网IP地址和端口进行connect,根据不同的路由器会有不同的结果,有些路由器在这个操作就能建立连接(例如我用的TPLink R4'02),大多数路由器对于不请自到的SYN请求包直接丢弃而导致connect失败,但NAT-A会纪录此次连接的源地址和端口号,为接下来真正的连接做好了准备,这就是所谓的打洞,即B向A打了一个洞,下次A就能直接连接到B刚才使用的端口号了。 7、 客户端B打洞的同时在相同的端口上启动侦听。B在一切准备就绪以后通过与S的【主连接】回复消息“我已经准备好”,S在收到以后将B经过NAT-B转换后的公网IP和端口号告诉给A。 8、 A收到S回复的B的公网IP和端口号等信息以后,开始连接到B公网IP和端口号,由于在步骤6中B曾经尝试连接过A的公网IP地址和端口,NAT-A纪录了此次连接的信息,所以当A主动连接B时,NAT-B会认为是合法的SYN数据,并允许通过,从而直接的TCP连接建立起来了。 // 客户节点信息 struct stUserListNode { char userName[10]; unsigned int ip; unsigned short port; }; CList是一个双向链表类。 1、头文件名不可少 Clist类定义在Afxtempl.h 头文件中,因此在使用该类时,需要加这个头文件名。 CList list; CString str1="hello"; CString str2="world"; CString str3="my"; CString str4="life"; list.AddTail(str1); list.AddTail(str2); list.AddTail(str3); list.AddTail(str4); POSITION pos = list.GetHeadPosition(); while(pos!=NULL) { pDC->TextOut(200,200,GetNext( POSITION& rPosition ) );//假设代码是在View类中的OnDraw() //函数里 } //struct 结构定义 struct struct-name : inheritance-list { public-members-list; protected: protected-members-list; private: private-members-list; } object-list; //object-list 对象类表 //inheritance-list 继承列表 //默认 public //union 联合定义 和结构相比 没有继承特性 不能定义protected 保护成员 union union-name { public-members-list; private: private-members-list; } object-list; struct stMessage { int iMessageType; union _message { stLoginMessage loginmember; stLogoutMessage logoutmember; stP2PTranslate translatemessage; }message; };//奇怪的 数组定义方式 for(int i=0;i {}//c++for语句是;隔开的 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。