从容关闭

从容关闭_2分词条

从容关闭即按下菜单键选择关机,或用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.//介绍http://blog.donews.com/zwell/articles/198830.aspx
第一步在用到以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\n"),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是一个双向链表类。http://blog.csdn.net/benny5609/archive/2007/10/10/1818962.aspx
1、头文件名不可少
Clist类定义在Afxtempl.h 头文件中,因此在使用该时,需要加这个头文件名。
CList<CString ,CString&> 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<myList.GetCount();i++)
    {}//c++for语句是;隔开的

附图

上传图片 

互动百科的词条(含所附图片)系由网友上传,如果涉嫌侵权,请与客服联系,我们将按照法律之相关规定及时进行处理。如需转载,请注明来源于www.hudong.com

被引用: 从容关闭已被如下媒体引用 我来补充
互动百科联盟开封信息百科网
开放分类: 我来补充
电脑术语
科学
计算机术语

讨论区

更多>>

编辑者

共4人协作

相关词条

电脑
编程
数组
链接
更多

Copyright © 2005-2009 hudong.com Ltd. All Rights Reserved. 互动在线 版权所有