基于mfc多用户通信(cdma多用户通信)

      最后更新:2022-12-13 20:26:13 手机定位技术交流文章

      如何用MFC实现两个客户端之间的点对点通信?(不借助服务器)

      我不明白LZ的这句话->不是主机显示的那4个双字节的IP地址,而是一个更长的数字 IP地址是4个双字节的IP地址 如果该客户机是位于一个局域网里 那么就会有2IP地址 内网IP 外网IP 网络中的客户IP当然是使用外网IP 整么会不是呢?实现P2P的方法把服务器简单称为S 客户端为C第一种情况 当C1与C2同时都位于外网的时候 那么C1可以直接向C2发送信息 C2也可以直接向C1发送信息第二种情况 当C1位于外网 而C2 是在一个局域网里的时候 C2可以直接向C1发信息 C1能收到 而C1向C2发送信息到达LAN的时候那么 传送信息包里的端口就会被改变 C2就无法接受到该信息 如果要让C2能接受到信息 那么C2就要先发送一个信息给C1 这个时候C2就打上了一个洞 能让C1 的指定端口发送信息到C2 这样C2就能接受到该信息第三种情况 也是最难的 C1与C2 分别位于不同的局域网了 那么就需要C1与C2先向服务器发送信息打洞 然后各自向对方的洞里发送一个信息 然后就可以实现P2P了 以上就是所谓的打洞技术
      IP地址格式是固定的,怎么会是一个更长的数字? 除非是IPv6
      用TCP协议实现服务器与客户端的有连接通信
      如何用MFC实现两个客户端之间的点对点通信?(不借助服务器)

      MFC中两个对话框中如何实现通信

      最好不要用全局变量。 将第二个对话框的指针保存在第一个对话框中,在第一个对话框中处理输入时,利用该指针将内容在第二个对话框中进行显示,如 m_pSecondDlg->GetDlgItem(IDC_TEST)->SetWindowText(m_InputInFirstDlg)。
      用全局变量参数,不过用完记得把它给清空! 首先,为你的全局变量在你想要获取的那个窗口的类中添加一个get函数!然后,在另一个输出窗口中定义这个类并构造它,然后调用那个已经编写好的get函数,那就行了!记得,要在那个窗口类中添加get函数,并调用它,而不是直接调用! 还有不明白可以再来请教!
      给对话框的编辑框设计一个编辑变量…然后消息响应到另一个对画框的时候把那个变量传过去,另一个对话框的编辑框也设个变量…也许会用到UPDADEDADA函数…手机说不情楚
      设置该变量有一全局变量与之对应
      SendMessage()
      MFC中两个对话框中如何实现通信

      mfc 多视图通信

       m_wndSplit1.CreateStatic(&m_wndSplit,2,3);//这句有问题吧改成: m_wndSplit1.CreateStatic( &m_wndSplit, 2, 3, WS_CHILD|WS_VISIBLE,    m_wndSplit.IdFromRowCol(0,0) ); //这句指得是把m_wndSplit第一行的第一列中分成二行三列C1View* pView=(C1View*)(((CMainFrame*)AfxGetMainWnd())->m_wndSplit1.GetPane(0,0));// AfxGetMainWnd你百度一下,要慎用。 C1View* pView  = (CMainFrame*)(AfxGetApp()->m_pMainWnd)->m_wndSplit1.GetPane(0,0);可能要好一点,(注意如果按照我的代码GetPane(0,0)是不存在的哦,得报错,因为第一行第一列已经被分割了不存在了)。 代码没有细看,太乱了。其他逻辑你别错了就好
      看是不是((CMainFrame*)AfxGetMainWnd())->m_wndSplit1空指针。确定这段代码是在主线程中执行的。
      mfc 多视图通信

      MFC如何实现进程间的通信

      2.1 文件映射 文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待。因此,进程不必使用文件I/O操作,只需简单的指针操作就可读取和修改文件的内容。Win32 API允许多个进程访问同一文件映射对象,各个进程在它自己的地址空间里接收内存的指针。通过使用这些指针,不同进程就可以读或修改文件的内容,实现了对文件中数据的共享。应用程序有三种方法来使多个进程共享一个文件映射对象。(1)继承:第一个进程建立文件映射对象,它的子进程继承该对象的句柄。(2)命名文件映射:第一个进程在建立文件映射对象时可以给该对象指定一个名字(可与文件名不同)。第二个进程可通过这个名字打开此文件映射对象。另外,第一个进程也可以通过一些其它IPC机制(有名管道、邮件槽等)把名字传给第二个进程。(3)句柄复制:第一个进程建立文件映射对象,然后通过其它IPC机制(有名管道、邮件槽等)把对象句柄传递给第二个进程。第二个进程复制该句柄就取得对该文件映射对象的访问权限。文件映射是在多个进程间共享数据的非常有效方法,有较好的安全性。但文件映射只能用于本地机器的进程之间,不能用于网络中,而开发者还必须控制进程间的同步。2.2 共享内存Win32 API中共享内存(Shared Memory)实际就是文件映射的一种特殊情况。进程在创建文件映射对象时用0xFFFFFFFF来代替文件句柄(HANDLE),就表示了对应的文件映射对象是从操作系统页面文件访问内存,其它进程打开该文件映射对象就可以访问该内存块。由于共享内存是用文件映射实现的,所以它也有较好的安全性,也只能运行于同一计算机上的进程之间。2.3 匿名管道管道(Pipe)是一种具有两个端点的通信通道:有一端句柄的进程可以和有另一端句柄的进程通信。管道可以是单向-一端是只读的,另一端点是只写的;也可以是双向的一管道的两端点既可读也可写。匿名管道(Anonymous Pipe)是 在父进程和子进程之间,或同一父进程的两个子进程之间传输数据的无名字的单向管道。通常由父进程创建管道,然后由要通信的子进程继承通道的读端点句柄或写 端点句柄,然后实现通信。父进程还可以建立两个或更多个继承匿名管道读和写句柄的子进程。这些子进程可以使用管道直接通信,不需要通过父进程。匿名管道是单机上实现子进程标准I/O重定向的有效方法,它不能在网上使用,也不能用于两个不相关的进程之间。2.4 命名管道命名管道(Named Pipe)是服务器进程和一个或多个客户进程之间通信的单向或双向管道。不同于匿名管道的是命名管道可以在不相关的进程之间和不同计算机之间使用,服务器建立命名管道时给它指定一个名字,任何进程都可以通过该名字打开管道的另一端,根据给定的权限和服务器进程通信。命名管道提供了相对简单的编程接口,使通过网络传输数据并不比同一计算机上两进程之间通信更困难,不过如果要同时和多个进程通信它就力不从心了。2.5 邮件槽邮件槽(Mailslots)提 供进程间单向通信能力,任何进程都能建立邮件槽成为邮件槽服务器。其它进程,称为邮件槽客户,可以通过邮件槽的名字给邮件槽服务器进程发送消息。进来的消 息一直放在邮件槽中,直到服务器进程读取它为止。一个进程既可以是邮件槽服务器也可以是邮件槽客户,因此可建立多个邮件槽实现进程间的双向通信。通过邮件槽可以给本地计算机上的邮件槽、其它计算机上的邮件槽或指定网络区域中所有计算机上有同样名字的邮件槽发送消息。广播通信的消息长度不能超过400字节,非广播消息的长度则受邮件槽服务器指定的最大消息长度的限制。邮件槽与命名管道相似,不过它传输数据是通过不可靠的数据报(如TCP/IP协议中的UDP包)完成的,一旦网络发生错误则无法保证消息正确地接收,而命名管道传输数据则是建立在可靠连接基础上的。不过邮件槽有简化的编程接口和给指定网络区域内的所有计算机广播消息的能力,所以邮件槽不失为应用程序发送和接收消息的另一种选择。2.6 剪贴板剪贴板(Clipped Board)实质是Win32 API中一组用来传输数据的函数和消息,为Windows应用程序之间进行数据共享提供了一个中介,Windows已建立的剪切(复制)-粘贴的机制为不同应用程序之间共享不同格式数据提供了一条捷径。当用户在应用程序中执行剪切或复制操作时,应用程序把选取的数据用一种或多种格式放在剪贴板上。然后任何其它应用程序都可以从剪贴板上拾取数据,从给定格式中选择适合自己的格式。剪贴板是一个非常松散的交换媒介,可以支持任何数据格式,每一格式由一无符号整数标识,对标准(预定义)剪贴板格式,该值是Win32 API定义的常量;对非标准格式可以使用Register Clipboard Format函数注册为新的剪贴板格式。利用剪贴板进行交换的数据只需在数据格式上一致或都可以转化为某种格式就行。但剪贴板只能在基于Windows的程序中使用,不能在网络上使用。2.7 动态数据交换动态数据交换(DDE)是使用共享内存在应用程序之间进行数据交换的一种进程间通信形式。应用程序可以使用DDE进行一次性数据传输,也可以当出现新数据时,通过发送更新值在应用程序间动态交换数据。DDE和剪贴板一样既支持标准数据格式(如文本、位图等),又可以支持自己定义的数据格式。但它们的数据传输机制却不同,一个明显区别是剪贴板操作几乎总是用作对用户指定操作的一次性应答-如从菜单中选择Paste命令。尽管DDE也可以由用户启动,但它继续发挥作用一般不必用户进一步干预。DDE有三种数据交换方式:(1) 冷链:数据交换是一次性数据传输,与剪贴板相同。(2) 温链:当数据交换时服务器通知客户,然后客户必须请求新的数据。(3) 热链:当数据交换时服务器自动给客户发送数据。DDE交换可以发生在单机或网络中不同计算机的应用程序之间。开发者还可以定义定制的DDE数据格式进行应用程序之间特别目的IPC,它们有更紧密耦合的通信要求。大多数基于Windows的应用程序都支持DDE。2.8 对象连接与嵌入应用程序利用对象连接与嵌入(OLE)技术管理复合文档(由多种数据格式组成的文档),OLE提供使某应用程序更容易调用其它应用程序进行数据编辑的服务。例如,OLE支持的字处理器可以嵌套电子表格,当用户要编辑电子表格时OLE库可自动启动电子表格编辑器。当用户退出电子表格编辑器时,该表格已在原始字处理器文档中得到更新。在这里电子表格编辑器变成了字处理器的扩展,而如果使用DDE,用户要显式地启动电子表格编辑器。同DDE技术相同,大多数基于Windows的应用程序都支持OLE技术。2.9 动态连接库Win32动态连接库(DLL)中的全局数据可以被调用DLL的所有进程共享,这就又给进程间通信开辟了一条新的途径,当然访问时要注意同步问题。虽然可以通过DLL进行进程间数据共享,但从数据安全的角度考虑,我们并不提倡这种方法,使用带有访问权限控制的共享内存的方法更好一些。2.10 远程过程调用Win32 API提供的远程过程调用(RPC)使应用程序可以使用远程调用函数,这使在网络上用RPC进行进程通信就像函数调用那样简单。RPC既可以在单机不同进程间使用也可以在网络中使用。由于Win32 API提供的RPC服从OSF-DCE(Open Software Foundation Distributed Computing Environment)标准。所以通过Win32 API编写的RPC应用程序能与其它操作系统上支持DEC的RPC应用程序通信。使用RPC开发者可以建立高性能、紧密耦合的分布式应用程序。2.11 NetBios函数Win32 API提供NetBios函数用于处理低级网络控制,这主要是为IBM NetBios系统编写与Windows的接口。除非那些有特殊低级网络功能要求的应用程序,其它应用程序最好不要使用NetBios函数来进行进程间通信。2.12 SocketsWindows Sockets规范是以U.C.Berkeley大学BSD UNIX中流行的Socket接口为范例定义的一套Windows下的网络编程接口。除了Berkeley Socket原有的库函数以外,还扩展了一组针对Windows的函数,使程序员可以充分利用Windows的消息机制进行编程。现在通过Sockets实现进程通信的网络应用越来越多,这主要的原因是Sockets的跨平台性要比其它IPC机制好得多,另外WinSock 2.0不仅支持TCP/IP协议,而且还支持其它协议(如IPX)。Sockets的唯一缺点是它支持的是底层通信操作,这使得在单机的进程间进行简单数据传递不太方便,这时使用下面将介绍的WM_COPYDATA消息将更合适些。2.13 WM_COPYDATA消息WM_COPYDATA是一种非常强大却鲜为人知的消息。当一个应用向另一个应用传送数据时,发送方只需使用调用SendMessage函数,参数是目的窗口的句柄、传递数据的起始地址、WM_COPYDATA消息。接收方只需像处理其它消息那样处理WM_COPY DATA消息,这样收发双方就实现了数据共享。 WM_COPYDATA是一种非常简单的方法,它在底层实际上是通过文件映射来实现的。它的缺点是灵活性不高,并且它只能用于Windows平台的单机环境下。
      用共享内存
      MFC如何实现进程间的通信

      MFC 服务器如何连接多个客户端并与其通信

      如果说,你是服务器,并且,你谈到了连接,那么我可以认为你是用的tcp tcp下,你可以看一下相关的socket开发。 直接搜索vc socket tcp
      MFC 服务器如何连接多个客户端并与其通信

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/47438.html

          热门文章

          文章分类