JAVA局域网飞鸽传书软件设计与实现

news2024/10/7 16:20:04

      本文的目标是设计一个类似飞鸽传输的局域网通信软件,并分析它在其领域的优势。本设计以C编 写,能在windows 2000/net/xp等环境下运行。设计共分为五大模块,分别是:首先,介绍选题背景及意义和国内外研究现状;其次,介绍TCP/IP点对点协议技术,C/S架构和SOCKET网络编程技术;再次,对当前局域网文件传输进行需求分析并提出解决方案;然后,根据解决方案对系统进行设计;最后,对工作计划统计以及分析系统进行测试并得到测试结果。

  1. 引言

1.1课题背景

当时间走向21世纪,当今时代也由工业经济渐渐成为了知识经济、信息经济的时代。信息的需求量的不停增加,促使了计算机通信的日新月异!虽然网络的使用频率与使用的范围都越来越广泛,但是人们使用的网络的用途主要的还是只有两个:(1).相互之间的沟通,(2).资源共享。

局域网作为网络的一个重要组成部分,它不但用户与外界连接的枢纽,同时也是近距离用户之间沟通与资源共享的一个重要途径。在这种情况下,如何使局域网内的用户便捷的勾通,以及快速的资源共享,也就成为了人们对网络研究的重点之一。

本系统仿飞鸽传输,是一个局域网内的通迅工具,主要通过Winsockt完成。它据有的功能有:

(1)局域网内用户间简单的文字聊天功能;

(2)局域网内用户间相互的文件、文件夹传输。

1.2本课题主要研究背景

随着计算机和通讯技术的发展,计算机的网络化已经渗透到各个应用领域,尤其是以TCP/IP协议之间的网络互连发展很快,计算机应用系统的开发由传统的单机方式转向到了网络环境的开发。

大部分编程语言都提供了基于Windows Sockets网络编程接口的Win socket控件,它使开发TCP/IP通讯变得简单方便。

网络之间进行数据通讯时,使用地址来标识网络中的计算机,有了地址以后,数据才会准确地发送到地址所指向的计算机。TCP/IP协议使用IP地址为网络中计算机的标识,而且每台计算机的IP地址是唯一的,一般情况下,每台计算机运行的程序不止一个,因此要在应用程序中建立连接的话,还需要一个地址标识。

在TCP/IP协议书中使用端口(PORT)作为计算机上运行的应用程序的标识,因此TCP/IP协议中一个有效的网络地址包括IP地址和端口地址两个部分。TCP/IP协议提供了两种计算机之间的通讯方式:TCP方式和UDP方式。

TCP是一种面向连接的服务,在文件传输时会先行建立连接,通过链接提供双向、有序且无重复的数据流服务、以及流量控制、差错检测和纠错等服务,从而确保文件传输的正确性;UDP则是一种无连接的服务,它在传输文件时不会确保传输端的文件能够正确无误的传送到接收端,所以当使用UDP时,通常要自己作接收确认的工作。

1.3本课题主要研究思路和方法

本系统的开发采用基于win socket的广播发送模式,进行文字聊天和文件、文件夹传输的设计与开发。因此,本设计首先分析该系统的相关功能,结合本设计的相关要求写出需求分析;其次,综合运用以前所学的相关知识,选择所熟悉的开发工具进行本设计的开发;在设计中以需求分析为基础,写出系统开发计划、实现流程及相关问题的实现方法;最后,在系统开发完毕后,进行调试和运行,做好调试和运行的相关记录。

1.4研究项目的目的以及意义

随着互联网技术的迅猛发展,网络给人们带来了很多便利,比如人们借助于网络进行相互交流变得更加方便。聊天工具作为互联网中运用最为广泛的通信工具之一,如今都已被广大网民接受。很多人都使用过飞鸽传书软件,飞鸽传书发展到现在已经具有了很多功能:有文字聊天、文件、文件夹传输的基本功能,也有密封、加锁等较为复杂的功能。本毕业设计的目的主要是为了检查使学生综合运用以前所学知识(包括以前所学的一些关于网络、编程、信息安全等知识)的能力,模拟局域网飞鸽传书软件,开发一个天系统软件,本毕业设计主要实现局域网内文字聊天及文件传输等功能。

1.5 Win Socket的寻址方式

 因为Winsock要兼容多个协议,所以必须使用通用的寻址方式。TCP/IP使用地址和端口号来指定一个地址,但是其它协议也许采用不同的形式。如果Winsock强迫使用特定的寻址方式,添加其他协议就不大可能了。在Winsock中,应用程序员通过SOCKADDR_IN结构来指定IP地址和端口号。定义如下:

Struct sockaddr_in{

                    short sin_family;

                    u_short sin_port;

                    struct in_addr sin_addr;

                    har sin_zero[8];

      };

应用程序可以使用inet_addr函数将一个小数点分隔的十进制IP地址字符串转化成由32位二进制数表示的IP地址。inet_ntoa函数将一个网络字节顺序的32位IP地址转化字符串。注意:inet_addr返回的32位二进制数是用网络顺序存储的。

  1. 系统需求分析

2.1系统设计目标

根据对飞鸽传输系统的调研,我认为本设计需要满足以下几个系统设计目标:

(1)实用性原则:真正为局域网的实际工作服务,按照需求的轻重缓急,合理设计本系统。

(2)可靠性原则:必须为用户提供安全的服务,尤其是要保证传输的稳定性。

(3)友好性原则:使用本系统的用户相当一部分对计算机知识了解很少,所以系统操作上要求简单方便,便于用户掌握。

(4)可扩展性原则:采用开放的标准和接口,便于系统向更大的规模和功能扩展。

 2.2系统总体需求分析

根据用户需求,本系统分为两个子系统:1:局域网内简单文字聊天子系统,它是在局域网内选择相应的用户,以便对之发送文字信息,2:文件、文件夹传输系统,它是在先把需要传输的文件、文件夹转换成相就的数据流传关,到了目的主机再由之还原。本系统的文字聊天系统实现的功能类似于QQ用户之间的聊天。在设计系统时,应根据简洁、流畅的特点安排布局,在编制程序时应充分考虑这一点传输的稳定、快捷,真正做到“简洁、高效、流畅、安全”的使用环境。用户使用的过程为,先是用户登开启本软件,软件自动检索局域网的其它用户,并以之成为用户列表,让用户选择。当用户发现所要连接的用户之后,双击该用户,则出现发送窗口。用户用之来发送消息或者文件。接收方可以选择接收或者拒绝相应的传输文件。

2.3组织结构的分析   

以下为组织结构图:

  1. 1 理论知识

3.1 C/S软件架构技术

C/S(Client/Server)结构,即大家熟知的客户机/服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。

传统的C/S体系结构虽然采用的是开放模式,但这只是系统开发一级的开放性,在特定的应用中无论是Client端还是Server端都还需要特定的软件支持。由于没能提供用户真正期望的开放环境,C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件,加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。

3.2 用户数据报协议(UDP)

UDP(User Datagram Protocol):用户数据包协议,它和TCP一样位于传输层,和IP协议配合使用,在传输数据时省去包头,但它不能提供数据包的重传,所以适合传输较短的文件。

由于大多数网络应用程序都在同一台机器上运行,计算机上必须能够确保目的地机器上的软件程序能从源地址机器处获得数据包,以及源计算机能收到正确的回复。这是通过使用UDP的“端口号”完成的。源端口号标识了请求域名服务的本地机的应用程序,同时需要将所有由目的站生成的响应包都指定到源主机的这个端口上。与TCP不同,UDP并不提供对IP协议的可靠机制、流控制以及错误恢复功能等。由于UDP比较简单,UDP头包含很少的字节,比TCP负载消耗少,所以UDP适用于不需要TCP可靠机制的情形,比如,当高层协议或应用程序提供错误和流控制功能的时候。UDP是传输层协议,服务于很多知名应用层协议,包括网络文件系统(NFS)、简单网络管理协议(SNMP)、域名系统(DNS)以及简单文件传输系统(TFTP)。

3.3单播、广播、组播浅析

硬件组播(multicasting)是一种多点投递的形式,它使用硬件技术,通过使用大量组播地址来通信。当某一组机器需要通信时,选择一个组播地址,并配置好相应的网络接口硬件,识别组播地址,从而收到该组播地址上分组的拷贝。广播(broadcasting)是多点投递的最普遍的形式,它向每一个目的站投递一个分组的拷贝。它可以通过多个单次分组的投递完成,也可以通过单独的连接传递分组的拷贝,直到每个接收方均收到一个拷贝为止。

在多数网络中,用户是通过把分组分送给一个特殊保留的地址即广播地址(broadcast address)来进行广播投递,它的主要缺点是会耗费大量的主机资源和网络资源。

单播(unexacting)是指只有一个目的地的数据报传递。从投递目的地的数量而言,单播和广播均可看作是组播的一个子集。单播可以看作仅包括一台机器群组的组播;广播可以看作包含了所有机器群组的组播。但从数据报的投递方式而言,单播、广播和组播还是有较大的区别。

  1. 系统设计

本系统主要分为文字聊天和文件传书两大部分。所以本论文将把系统分成两大模块来介绍。

4.1 文字聊天模块的整体构架

   本系统文字聊天是采用C/S结构,所以每个客户端也是作为服务器端的,当系统发送信息给局域网的用户,主要由单播模块和广播模块来实现,而其中的单播模块和用户信息模块是具有依赖性的,在接收信息的时候又有两个模块来完成,一是信息接收的模块,另一个是信息查看的模块。

由此可以看出本模块主要分为两模块:发送模块和接收模块。发送模块:单播模块,广播模块,用户信息模块,信息记录模块接收模块:接收信息模块,查看信息模块

综上所述,系统的架构图为:

 

4.2 文件传输模块的主要流程图

由于本模块采用C/S架构故将系统运行载体分为两个部分:客户端与服务器端。文件传输需要建立有效的连接后,通过TCP/IP协议实现点对点的文件传输。通信双方是通过三次握手建立连接,实现文字、文件传输,最后关闭套节字连接。其传输的整个流程图如下:

4.3系统的主要功能模块

4.3.1文字聊天的主登录界面

由于系统的用户设计是针对的用户日常活动,而非专门从事计算机操作的人员,所以本系统力求界面友好、简单,以便给用户提供一个舒适的使用环境。在文字聊天模块的主要目标是简捷,方便。

为了方便用户选取单个用户进行信息发送和查看在线用户的信息,所以设计了一个ListView来进行显示如图5,在ListView中包括了用户名、工作组、用户级数等。当有用户打开本系统的时候将会向局域网中的所有用户发送一个握手信息来获取网络中的在线用户信息并添加到列表中显示出来,同时也把自己的网络资源信息发送给对方,使自己被添加到其他用户的列表中。

登录界面,如图4所示:

 

进行发送的,在发送时将会把信息发送给在局域网内部的所有用户包括自己。选择用户并输入发送信息,单播发送的按钮为BitBtn2,主要是通过Id UDP Server和Id UDP Client组件来编写的,由client. Send Buffer语句来发送的,主要是对局域网内部的同一工作组用户发送信息。

广播发送的按钮为BitBtn3,主要是通过Id UDP Server和Id UDP Client组件来编写的,主要是使用了client. Broadcast来对信息,如图5所示:

其中主要的代码为:

void TMsgApp::InitWindow(void)

{

      WNDCLASS      wc;

      HWND        hWnd;

      char              class_name[MAX_PATH] = IPMSG_CLASS, *tok, *msg, *p;

      ULONG              nicAddr = 0;

      int                 port_no = atoi(cmdLine); 

      if (port_no == 0)

             port_no = IPMSG_DEFAULT_PORT;

      if ((tok = strchr(cmdLine, '/')) && separate_token(tok, ' ', &p))

      {

             BOOL   diag = TRUE;

             DWORD      status = 0xffffffff;

             if (stricmp(tok, "/NIC") == 0)  // NIC           {

                    if (tok = separate_token(NULL, ' ', &p))

                           nicAddr = ResolveAddr(tok);

             }

             else if (stricmp(tok, "/MSG") == 0)      

             {

                    MsgMng       msgMng(nicAddr, port_no);

                    ULONG      command = IPMSG_SENDMSG|IPMSG_NOADDLISTOPT|IPMSG_NOLOGOPT, destAddr;

                    while ((tok = separate_token(NULL, ' ', &p)) != NULL && *tok == '/') {

                           if (stricmp(tok, "/LOG") == 0)

                                  command &= ~IPMSG_NOLOGOPT;

                           else if (stricmp(tok, "/SEAL") == 0)

                                  command = IPMSG_SECRETOPT;

                    }

                    if ((msg = separate_token(NULL, 0, &p)) != NULL)

                    {

                           diag = FALSE;

                            if ((destAddr = ResolveAddr(tok)) != NULL)

                                  status = msgMng.Send(destAddr, htons(port_no), command, msg) ? 0 : -1;

                    }

             }

             if (nicAddr == 0)

             {

                    if (diag)

                           MessageBox(0, "ipmsg.exe [portno] [/MSG [/LOG] [/SEAL] <hostname or IP addr> <message>]\r\nipmsg.exe [portno] [/NIC nic_addr]", MSG_STR, MB_OK);

                    ::ExitProcess(status);

                    return;

             }

      }

 

4.3.2文字聊天信息的封装

封装是一种把多次聊天的的数据捆绑在一起,使这两者不受外界干扰和误用的机制.封装可被理解为一种用做保护的包装器,以防止代码和数据被包装器外部所定义的其他代码任意访问.对包装器内部代码与数据的访问通过一个明确定义的接口来控制.封装代码的好处是每个人都知道怎样访问代码,进而无需考虑实现细节就能直接使用它,同时不用担心不可预料的副作用.

用户密封只需选择seal选项,程序插件自动生成封装功能。并且在聊天过程中,封装的过程仍在持续,聊天的内容是边封装数据包边传输。

密封发送信息接收界面,如图6所示

 

在点击open后显示信息。

其中实现的主要代码为:

BOOL TApp::PreProcMsg(MSG *msg)      // for TranslateAccel & IsDialogMessage

{

      for (HWND hWnd=msg->hwnd; hWnd != NULL; hWnd=::GetParent(hWnd))

      {

             TWin     *win = SearchWnd(hWnd);

             if (win != NULL)

                    return     win->PreProcMsg(msg);

      }

      return     FALSE;

}

LRESULT CALLBACK TApp::WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

{

      TWin *win = SearchWnd(hWnd);

      if (win)

             return     win->WinProc(uMsg, wParam, lParam);

      if ((win = preWnd) != NULL)

      {

             preWnd = NULL;

             AddWinByWnd(win, hWnd);

             return     win->WinProc(uMsg, wParam, lParam);

      }

      return     DefWindowProc(hWnd, uMsg, wParam, lParam);

}

4.3.3 聊天信息的加锁

加锁名如其实,其作用主要在于使传送的信息或者文件、文件夹只能给有password的用户看,从而加强了信息的安全程度。在现在这个网络黑客泛滥的时代,为了保护信息的隐私,加锁就更加必要了。以下为加锁信息的主要界面。

在加锁后的信息接收界面,如图7所示:

 

点击确定后显示,如图8所示:

 

其中主要代码为:

       BOOL TRegistry::DeleteChildTree(LPSTR subKey)

{

      char       buf[100];

      BOOL   ret = TRUE;

      if (subKey != NULL && OpenKey(subKey) != TRUE)

             return     FALSE;

      while (EnumKey(0, buf, sizeof(buf)))

      {

             if ((ret = DeleteChildTree(buf)) != TRUE)

                    break;

      }

      if (subKey != NULL)

      {

             CloseKey();

             ret = DeleteKey(subKey) ? ret : FALSE;

      }

      else {

             while (EnumValue(0, buf, sizeof(buf)))

             {

                    if (DeleteValue(buf) != TRUE)

                    {

                           ret = FALSE;

                           break;

                    }

             }

      }

      return     ret;

}

4.3.4文件传输的界面

与文字聊天一样,系统的文件、文件夹传输模块也尽量地要求简单易行,便于操作。当然,作为文件的传输,速度和安全也就成为了重要的问题,系统的简单加锁能达到局域网较为单一的环境要求。

文件传输的过程中流程为首先客端的主机通过TCP/IP协议建立链接,然后客户机发送套节字请求,通过3次握手连接响应,再转换数据为socket流传送,最近通过3次握手断开连接响应。

选择用户并拖入相应所要传送的文件及文件夹,如图9所示:

 

 点击所发送的文件为文件另存为,界面如图10所示:

选择路径确定后,文件开始传输。其传送界面,如图11所示:

 

实现的主要代码为:

      void TSendDlg::InitializeHeader(void)

{

      int          order[MAX_SENDWIDTH];

      int          revItems[MAX_SENDWIDTH];

      while (maxItems > 0)

             SendDlgItemMessage(HOST_LIST, LVM_DELETECOLUMN, --maxItems, 0);

      ColumnItems = cfg->ColumnItems & ~(1 << SW_ABSENCE);

      memcpy(FullOrder, cfg->SendOrder, sizeof(FullOrder));

      for (int cnt=0; cnt < MAX_SENDWIDTH; cnt++) {

             if (GetItem(ColumnItems, cnt)) {

                    items[maxItems] = cnt;

                    revItems[cnt] = maxItems++;

             }

      }

      int          orderCnt = 0;

      for (cnt=0; cnt < MAX_SENDWIDTH; cnt++) {

             if (GetItem(ColumnItems, FullOrder[cnt]))

                    order[orderCnt++] = revItems[FullOrder[cnt]];

      }

      DWORD dw = ::GetWindowLong(GetDlgItem(HOST_LIST), GWL_STYLE) | LVS_SHOWSELALWAYS;

      ::SetWindowLong(GetDlgItem(HOST_LIST), GWL_STYLE, dw);

      DWORD style = SendDlgItemMessage(HOST_LIST, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0) | LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP;

      if (cfg->GlidLineCheck)

             style |= LVS_EX_GRIDLINES;

      else

             style &= ~LVS_EX_GRIDLINES;

      SendDlgItemMessage(HOST_LIST, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, style);

      static char     *headerStr[MAX_SENDWIDTH];

4.3.5用户密封或加锁传输文件

文件传输模块实现主要依靠发送端与接收端建立有效的连接后,客户端不断地向SOCKET写入文件流,服务器端不断接受来自客户端的SOCKET文件流。直到文件传输完毕关闭套节字连接并释放空间。

密封和加锁主要是通过程序的插件对所传送的文件加以密封,加密,以便确保文件的安全性。

点击open (files)按钮,界面如图12所示:

 

用户接收到加锁的文件

 

其中主要代码为:

BOOL TRegistry::DeleteChildTree(LPSTR subKey)

{

      char       buf[100];

      BOOL   ret = TRUE;

      if (subKey != NULL && OpenKey(subKey) != TRUE)

             return     FALSE;

      while (EnumKey(0, buf, sizeof(buf)))

      {

             if ((ret = DeleteChildTree(buf)) != TRUE)

                    break;

      }

      if (subKey != NULL)

      {

             CloseKey();

             ret = DeleteKey(subKey) ? ret : FALSE;

      }

      else {

             while (EnumValue(0, buf, sizeof(buf)))

             {

                    if (DeleteValue(buf) != TRUE)

                    {

                           ret = FALSE;

                           break;

                    }

             }

      }

      return     ret;

}

  1. 系统测试

5.1测试环境

简单含有两台或者两台以上主机的局域网一个,主机的最低配置: CPU PIII8000 ,内存SDRAM 64M,WIN2000/XP/9X,2003下均测试通过.建议用户CPU PIII,内存256M及以上。

5.2测试结果

系统在上述软硬件环境下对此系统各个子模块功能作出测试,结果基本能够达到预期功能。

结    论

随着互联网技术的迅猛发展,网络给人们带来了很多便利,局域网以其快捷的速度、优异的准确率始终在沟通和资源共享方面占有一席之地。局域网内的文字聊天以及文件、文件夹的传输的工具早已经为人们所创造和使用。

主要工作:

 1.熟悉业务流程,进一步分析需求。了解程序的业务流程和客户的需求,为分析管理需求打下基础。

2.研究并设计飞鸽传书系统的功能组成。它的核心是“聊,传”,因此确定系统的基本功能就是聊天和文件传送。

3.学习借鉴其它优秀软件,取长补短,可以使系统的开发过程少走弯路。

4.收集资料,为系统实现做准备。

5.设计完成系统软件。选择适当的设计软件,主要得用win socket控件的主要功能 。由于时间比较仓促,个人开发能力也有限,系统还存在一些其它的技术性问题,还需在今后的实践中不断总结和改善,以提高系统技术含量和研究价值,增强自身开发能力。

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/425543.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【id:31】【20分】A. Point(类与构造)

题目描述 下面是一个平面上的点的类定义&#xff0c;请在类外实现它的所有方法&#xff0c;并生成点测试它。 输入 测试数据的组数 t 第一组测试数据点p1的x坐标 第一组测试数据点p1的y坐标 第一组测试数据点p2的x坐标 第一组测试数据点p2的y坐标 .......... 输出 输出…

阿里都在用的线上问题定位工具【收藏备用】

简介 Arthas 是Alibaba开源的Java诊断工具&#xff0c;动态跟踪Java代码&#xff1b;实时监控JVM状态&#xff0c;可以在不中断程序执行的情况下轻松完成JVM相关问题排查工作 。支持JDK 6&#xff0c;支持Linux/Mac/Windows。这个工具真的很好用&#xff0c;而且入门超简单&…

【故障诊断】用于轴承故障诊断的性能增强时变形态滤波方法及用于轴承断层特征提取的增强数学形态算子研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。⛳座右铭&#…

动态网站开发讲课笔记06:JSP技术

文章目录零、本节学习目标一、JSP概述&#xff08;一&#xff09;什么是JSP1、JSP的概念2、JSP的特征&#xff08;1&#xff09;跨平台&#xff08;2&#xff09;业务代码相分离&#xff08;3&#xff09;组件重用&#xff08;4&#xff09;预编译&#xff08;二&#xff09;编…

Kettle(9.3.0)连接ClickHouse

注意&#xff1a;低版本的kettle即使装ClickHouse驱动包后也不一定支持ClickHouse数据库连接&#xff08;具体kettle从什么版本开始支持ClickHouse没测试过&#xff09;&#xff0c;只有高版本的kettle在安装ClickHouse驱动包后才支持ClickHouse数据库连接&#xff0c;因此这里…

海康工业相机USB相机问题排查思路—Windows 系统

​第一步骤:固件版本 a) 查看相机固件版本 b) 若较老建议升级成最新固件后再测试异常是否消失。 注意切勿跨大版本升级; 第二步骤:驱动排查查看客户端中 USB 相机枚举列表中的相机图标,正常情况下如图 2-1:若有“2”的字样(如图 2-2),则说明 PC 的 USB 口是 2.0 的,…

故障注入的方法与工具

可靠性是评估软件质量的重要属性&#xff0c;关键安全系统&#xff08;Safety Critical Systems&#xff0c;SCS&#xff09;对可靠性的要求尤为严格&#xff0c;因其一旦失效&#xff0c;将可能对生命、财产或环境造成重大损害。以汽车为例&#xff0c;ISO26262中ASIL D要求相…

TCP三次握手四次挥手及time_wait状态解析

TCP的建立——三次握手 1.服务器必须准备好接受外来的连接。通常通过调用socket&#xff0c;bind&#xff0c;listen这三个函数来完成&#xff0c;我们称之为被动打开(passive open)。 2. 客户端通过调用connect函数发起主动的打开(active open)。这导致客户TCP发送一个SYN(同步…

【分享】除了压缩文件,WinRAR还有这些好用的功能

WinRAR是一款功能强大的压缩软件&#xff0c;可以解压缩RAR、ZIP及其它类型文件。但很多人不知道&#xff0c;除了解压、压缩文件&#xff0c;WinRAR还有其他的功能&#xff0c;今天小编就来分享一下。 功能一&#xff1a;锁定文件&#xff0c;禁止增删或修改压缩包里的文件 W…

国内外人工智能AI工具网站大全(一键收藏,应有尽有)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 国内外人工智能AI工具网站大全&#xff08;一键收藏&#xff0c;应有尽有&#xff09;摘要一、AI写作工具二、AI图像工具2.1、常用AI图像工具2.2、AI图片插画生成2.3、AI图片背景移除…

基于电子商务平台客户管理系统的设计与实现_kaic

摘要 本论文旨在设计和实现一个基于电子商务平台的客户关系管理系统&#xff0c;以提高企业与客户之间的互动和关系维护效率。本文首先介绍了客户关系管理系统的相关理论和技术&#xff0c;并分析了其在电子商务平台中的应用价值。接着&#xff0c;进行了电子商务平台客户关系管…

微信小程序python+vue今日菜谱美食点赞收藏评价系统

谈到外出就餐&#xff0c;我们除了怕排队&#xff0c;也怕这家餐厅的服务员不够用&#xff0c;没人为我们点餐&#xff0c;那么一餐饭排队一小时&#xff0c;点餐恐怕也要花个半小时&#xff0c;这样不仅给消费者的用餐体验大打折扣同时也给商家的口碑造成了严重负面的影响&…

【LeetCode: 剑指 Offer II 090. 环形房屋偷盗(打家窃舍) | 暴力递归=>记忆化搜索=>动态规划】

&#x1f34e;作者简介&#xff1a;硕风和炜&#xff0c;CSDN-Java领域新星创作者&#x1f3c6;&#xff0c;保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享&#x1f48e;&#x1f48e;&#x1f48e; &#x1f34e;座右…

不可区分混淆:GGH+13

参考资料&#xff1a; Joe Kilian. Founding cryptography on oblivious transfer. In Janos Simon, editor, STOC, pages 20–31. ACM, 1988.Barak B, Goldreich O, Impagliazzo R, et al. On the (im) possibility of obfuscating programs[C]//Advances in Cryptology—CRY…

音视频八股文(2)--ffmpeg常见命令(1)

官方文档&#xff1a; https://www.ffmpeg.org/ffplay-all.html https://www.ffmpeg.org/ffmpeg-all.html 01-Windows FFMPEG命令行环境搭建 要在Windows系统上使用FFmpeg命令行&#xff0c;可以按照以下步骤搭建环境&#xff1a; 1.访问FFmpeg官方网站&#xff0c;下载已经…

《趣学数据结构》大纲

文章目录趣学数据结构一、数据结构入门&#xff08;一&#xff09;数据结构的基础知识1、基本概念&#xff08;1&#xff09;数据&#xff08;2&#xff09;数据元素&#xff08;3&#xff09;数据项&#xff08;4&#xff09;数据对象&#xff08;5&#xff09;数据结构2、逻辑…

利用在线Linux内核代码阅读分析网站linux kernel map分析CFS调度器代码调用链路

linux kernel map网址 https://makelinux.github.io/kernel/map/ 源码分析 点击Scheduler标签内的kernel/sched/ 左侧菜单&#xff0c;选择一个内核版本 Search Identifier搜索框输入要搜索的函数&#xff0c;回车执行搜索 结果列出了一处函数定义及两处引用 新窗口打开定义 …

14.Java面向对象----Object类

Object类 Java中Object 类是所有类的父类&#xff0c;也就是说 Java 的所有类都继承了 Object&#xff0c;子类可以使用 Object 的所有方法。 Object 类位于 java.lang 包中&#xff0c;编译时会自动导入&#xff0c;我们创建一个类时&#xff0c;如果没有明确继承一个父类&am…

【Spark】介绍 快速入门

目录 介绍 Spark and Hadoop Spark or Hadoop 核心模块 Spark Core Spark SQL Spark Streaming Spark MLlib Spark GraphX 快速上手 来源&#xff1a; 介绍 Spark 是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。 Spark and Hadoop HadoopHadoop 是由 java…

Linux 网络I/O模型

一、Linux下面的I/O模型 Linux下面一共有五种可以使用的I/O模型&#xff0c;如下&#xff1a; 1&#xff09;阻塞式I/O 2&#xff09;非阻塞式I/O 3&#xff09;I/O多路复用&#xff08;select与epoll&#xff09; 4&#xff09;信号驱动式I/O 5&#xff09;异步I/O 下面重点介…