精华内容
下载资源
问答
  • MFC UDP实例代码

    2019-06-26 17:34:31
  • MFC UDP通信简单实现

    2018-05-31 13:50:39
    Hello, 这是一个MFC UDP通信示例,好用,网上整理,侵权请通知在下删除。谢谢
  • mfc socket实例(基于UDP

    热门讨论 2010-09-04 11:46:20
    实例是一个画圆实例,通过服务端发送半径,颜色,位置给客户端,在客户端画出此圆形
  • p2p聊天程序,mfcudp打洞实例

    热门讨论 2009-09-02 13:46:08
    p2p聊天程序,很难找的例子,自己终于写到了一个。mfcudp打洞实例。资源有点贵,不多也是人之常情。
  • 采用UDP通讯,添加timer定时器,自己定义数据结构,通过udp进行发送和接收。 主要代码如下: CAsyncSocket m_sock; m_sock.Create(2048, SOCK_DGRAM, FD_READ | FD_WRITE, "192.168.1.31"); int isend = m_sock....
  • MFC UDP 聊天程序

    千次阅读 2017-03-18 15:09:51
    UDP: 用户数据包协议(英语:User Datagram Protocol,缩写为UDP),又称用户数据报文协议,是一个简单的面向数据报的传输层协议[1] 采用 UDP 设计聊天程序,实际上是对 Winsocket 函数进行封装。 2. 初步设计 ...

    1. 介绍

    UDP: 用户数据包协议(英语:User Datagram Protocol,缩写为UDP),又称用户数据报文协议,是一个简单的面向数据报的传输层协议[1]
    采用 UDP 设计聊天程序,实际上是对 Winsocket 函数进行封装。

    2. 初步设计

    2.1 设计用户数据结构体

    数据库端采用 文件 存储用户名,密码等信息。
    用户数据结构体 {

    // user
    typedef struct User{
        char name[20];
        char password[20];
    }User;

    }

    2.2 界面设计

    MFC 设计界面和 C# 一样简介 (拖动控件 event由变量控制
    这里写图片描述

    2.3 为控件事件添加处理函数

    私聊

    把待发送数据包发给指定的用户。
    实现方式: 将 pkt 用户名字段 与 用户数据库文件匹配查找,如果找到,则将 pkt.message 发送给该用户

    // 用户端 处理私聊
    void CChatClientDlg::OnBnClickedButton2()
    {
        // TODO:  在此添加控件通知处理程序代码
        UpdateData(TRUE);
    
        PrivateMsgPkt pkt;
        pkt.header.pktType = PKT_PRIVATE_MSG;
        strcpy(pkt.fromName, (LPCTSTR)m_strUserName);  // 来自
        strcpy(pkt.sendName, (LPCTSTR)m_strTo);               // 去向
        strcpy(pkt.msg, (LPCTSTR)m_strMsg);
    
        sendto(m_sPeer, (char*)&pkt, 4 + 20 + 20 + m_strMsg.GetLength() + 1, \
            0, (sockaddr*)(&m_peerAddr), sizeof(m_peerAddr));
    
        char szOutText[1024];
    
        strcpy(szOutText, pkt.fromName);
        strcat(szOutText, ":   ");
        strcat(szOutText, pkt.msg);
    
        strcat(szOutText, "\r\n");
        m_editHistoryMsg.SetSel(0, 0);
        m_editHistoryMsg.ReplaceSel(szOutText);
    }   

    群聊

    将 pkt.message 发送给每一位用户

    // 用户端处理 群聊
    void CChatClientDlg::OnBnClickedButton1()
    {
        // TODO:  在此添加控件通知处理程序代码
        UpdateData(TRUE);
    
        PublicMsgPkt pkt;
        pkt.header.pktType = PKT_PUBLIC_MSG;
        strcpy(pkt.fromName, (LPCTSTR)m_strUserName);
        strcpy(pkt.msg, (LPCTSTR)m_strMsg);
    
        sendto(m_sPeer, (char*)&pkt, 4 + 20 + m_strMsg.GetLength() + 1,
            0, (sockaddr*)(&m_peerAddr), sizeof(m_peerAddr));
    
        char szOutText[1024];
    
        strcpy(szOutText, pkt.fromName);
        strcat(szOutText, ":   ");
        strcat(szOutText, pkt.msg);
    
        strcat(szOutText, "\r\n");
        m_editHistoryMsg.SetSel(0, 0);
        m_editHistoryMsg.ReplaceSel(szOutText);
    }

    3. 编程实现

    mfc_udp[2]

    4. 效果展示

    群聊

    allchat

    私聊

    onetoone

    重复的登录检测

    (类似 QQ 不可以在两台计算机同时登录)
    这里写图片描述

    参考资料

    [1] udp protocol
    [2] HomeMonitor (原始MFC_UDP项目已经不再开源,不过你可以通过HomeMonitor项目,了解网络编程相关的技巧)

    (全文完)

    展开全文
  • 基于MFC开发的TCP/IP的客户端和服务器与UDP开发的客户端和服务器,能实现文字的发送与接收,入门级别请入!VS2013,SOCKET类,不过现在很多都用CSOCKET类的CAsynSocket类,个人不是很了解,所以没有用!
  • UDP广播实例

    2012-10-07 09:35:53
    这是用C++和SOCKET写的UDP广播实例,适合初学者理解UDP广播的编写过程
  • 多线程之UDP实例

    2016-08-02 14:03:52
    package Socket; import java.net.DatagramPacket; import java.net.InetAddress; public class Dgram { public static DatagramPacket toDatagram(String s, InetAddress destIA, int destPort)
    package Socket;
    
    import java.net.DatagramPacket;
    import java.net.InetAddress;
    
    public class Dgram {
    
        public static DatagramPacket toDatagram(String s, InetAddress destIA,
                int destPort) {
            byte[] buf = new byte[s.length() + 1];
            s.getBytes(0, s.length(), buf, 0);
            return new DatagramPacket(buf, buf.length, destIA, destPort);
        }
    
        public static String toString(DatagramPacket p) {
            return new String(p.getData(), 0, p.getLength());
        }
    }
    复制代码

     

    复制代码
    package Socket;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.SocketException;
    
    public class ChatterServer {
        static final int INPORT = 1712;
        private byte[] buf = new byte[1000];
        private DatagramPacket dp = new DatagramPacket(buf, buf.length);
        private DatagramSocket socket;
    
        public ChatterServer() {
            try {
                socket = new DatagramSocket(INPORT);// 创建一接收消息的对象,而不是每次接收消息都创建一个
                System.out.println("Server started");
                while (true) {
                    socket.receive(dp);
                    //接收到客户端的消息
                    String rcvd = Dgram.toString(dp) + ",from address:"
                            + dp.getAddress() + ",port:" + dp.getPort();
                    System.out.println("From Client:"+rcvd);
                    
                    String echoString = "From Server Echoed:" + rcvd;
                    DatagramPacket echo = Dgram.toDatagram(echoString,
                            dp.getAddress(), dp.getPort());
                    //将数据包发送给客户端
                    socket.send(echo);
                }
            } catch (SocketException e) {
                System.err.println("Can't open socket");
                System.exit(1);
            } catch (IOException e) {
                System.err.println("Communication error");
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
            new ChatterServer();
        }
    }




    package Socket;

    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
    import java.net.UnknownHostException;

    public class ChatterClient extends Thread {

        private DatagramSocket s;
        private InetAddress hostAddress;
        private byte[] buf = new byte[1000];
        private DatagramPacket dp = new DatagramPacket(buf, buf.length);
        private int id;

        public ChatterClient(int identifier) {
            id = identifier;
            try {
                s = new DatagramSocket();
                hostAddress = InetAddress.getByName("localhost");

            } catch (UnknownHostException e) {
                System.err.println("Cannot find host");
                System.exit(1);
            } catch (SocketException e) {
                System.err.println("Can't open socket");
                e.printStackTrace();
                System.exit(1);
            }
            System.out.println("ChatterClient starting");
        }

        public void run() {
            try {
                for (int i = 0; i < 25; i++) {
                    String outMessage = "Client #" + id + ",message #" + i;
                    s.send(Dgram.toDatagram(outMessage, hostAddress,
                            ChatterServer.INPORT));
                    s.receive(dp);
                    String rcvd = "Client #" + id + ",rcvd from " + dp.getAddress()
                            + ", " + dp.getPort() + ":" + Dgram.toString(dp);
                    System.out.println(rcvd);
                }
            } catch (IOException e) {
                e.printStackTrace();
                System.exit(1);
            }
        }

        public static void main(String[] args) {
            for (int i = 0; i < 10; i++) {
                new ChatterClient(i).start();
            }
        }
    }

    展开全文
  • MFC 基于UDP的多线程聊天程序

    热门讨论 2010-10-10 10:05:47
    MFC 基于UDP写的多线程小小的聊天程序
  • C++ UDP广播 demo 实例

    热门讨论 2010-09-09 10:12:54
    VC++6.0 UDP demo 实例 简单的udp广播实例
  • MFC socket编程实例MyQQ

    2010-11-24 20:29:06
    MFC socket编程实例 MyQQMFC socket编程实例MyQQMFC socket编程实例MyQQ
  • C++ 网络套接字编程TCP和UDP实例

    千次阅读 2015-04-08 10:57:09
    1>test_udpclient.obj : error LNK2019:  无法解析的外部符号  __imp__htons@4 ,该符号在函数  _wmain  中被引用 1>test_udpclient.obj : error LNK2019:  无法解析的外部符号  __imp__inet_addr@4 ...

    1. 创建一个简单的SOCKET编程流程如下 面向有连接的套接字编程 服务器: 1) 创建套接字(socket) 2) 将套接字绑定到一个本地地址和端口上(bind) 3) 将套接字设定为监听模式,准备接受客户端


    1. 创建一个简单的SOCKET编程流程如下

    面向有连接的套接字编程

    服务器:

    1)  创建套接字(socket

    2)  将套接字绑定到一个本地地址和端口上(bind

    3)  将套接字设定为监听模式,准备接受客户端请求(listen

    4)  等待客户端请求到来,当请求到来后,接受连接请求,返回一个新的对应于此连接的套接字(accept

    5)  用返回的套接字和客户端进行通信(send/recv);

    6)  返回,等待另一个客户端请求

    7)  关闭套接字

    客户端:

    1)  创建套接字(socket

    2)  向服务器发出连接请求(connect

    3)  和服务器进行通信(send/recv

    4)  关闭套接字

     

    面向无连接的套接字编程

    服务器:(接收端)

    1)       创建套接字(socket

    2)       将套接字绑定到一个本地地址和端口上(bind

    3)       用返回的套接字和客户端进行通信(recvfrom);

    4)       关闭套接字

    客户端:(发送端)

    1)  创建套接字(socket

    2)  向服务器发送数据(sendto

    3)  关闭套接字

     

    例如:面向有连接的套接字编程

    首先在工程设置àlink 在对象库模板最后面再加上ws2_32.lib

    客户端:

    #include<Winsock2.h>

    #include<stdio.h>

    int main()

    {

     

    //第一步:加载socket库函数

    //**********************************************************

    WORD wVersionRequested;

    WSADATA wsaData;

    int err;

     

    wVersionRequested = MAKEWORD( 1, 1 );

     

    err = WSAStartup( wVersionRequested, &wsaData );

     

    if ( err != 0 )

     { 

    return 0;

    }

     

    if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) 

    {

    WSACleanup( );

    return 0;

    }

    //**********************************************************

    //第一步,创建套接字

    SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0) ;

     

    //定义套接字地址

    SOCKADDR_IN addrSrv;

    addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");  //获取服务器IP地址,inet_addr()IP地址转为点分十进制的格式

     

    addrSrv.sin_family = AF_INET;

    //sin_family 表示地址族,对于IP地址,sin_family成员将一直是AF_INET

     

    addrSrv.sin_port = htons(1234);

     

    //连接服务器

    //      connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

     

    if(connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR))!=0)

    {

    //MessageBox("连接失败");

    //return;

    printf("error");

    return 0;

    }else

    {

    printf("success");

    }

     

    char recvBuf[100];

    recv(sockClient,recvBuf,100,0);

    printf("客户端接收到的数据:%s",recvBuf);

    send(sockClient,"client send ",strlen("client send ")+1,0);

    //关闭套接字

    closesocket(sockClient);

    //清除套接字资源

    WSACleanup();        

    return 0;

    }

     

     

    服务器端:

    #include<Winsock2.h>

    #include<stdio.h>

    int main()

    {

     

    //第一步:加载socket库函数

    //**********************************************************

    WORD wVersionRequested;

    WSADATA wsaData;

    int err;

     

    wVersionRequested = MAKEWORD( 1, 1 );

     

    err = WSAStartup( wVersionRequested, &wsaData );

     

    if ( err != 0 ) {                           

    return 0;

    }

     

    if ( LOBYTE( wsaData.wVersion ) != 1 ||

    HIBYTE( wsaData.wVersion ) != 1 ) {

    WSACleanup( );

    return 0;

    }

    //**********************************************************

     

    //第二步创建套接字

    SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0);

     

    //第三步:绑定套接字

     

    //获取地址结构

    SOCKADDR_IN addrSrv;

     

    addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

    //IP地址指定为INADDR_ANY,允许套接字向任何分配给本地机器的IP地址发送或接收数据

    //htonl()将主机的无符号长整形数转换成网络字节顺序。

     

    addrSrv.sin_family = AF_INET;

    //sin_family 表示地址族,对于IP地址,sin_family成员将一直是AF_INET

     

     

    addrSrv.sin_port = htons(6000);

    //htons()将主机的无符号短整形数转换成网络字节顺序

     

    bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

     

    //监听客户端

    listen(sockSrv,5);

     

    //定义从客户端接受的地址信息

    SOCKADDR_IN addrClient ;

    int len = sizeof(SOCKADDR);

     

    while(1)

    {

    //不断等待客户端的请求的到来,并接受客户端的连接请求

    printf("等待客户连接\n");

    SOCKET sockConn = accept(sockSrv,(SOCKADDR*)&addrClient,&len);

    char sendBuf[100];

    sprintf(sendBuf,"welcome %s to wuhan",inet_ntoa(addrClient.sin_addr));

    printf("发送数据\n");

    send(sockConn,sendBuf,strlen(sendBuf)+1,0);

    char recvBuf[100];

    printf("等待接受数据\n");

    recv(sockConn,recvBuf,100,0);

    printf("%s\n",recvBuf);

    closesocket(sockConn);

     

    }

    WSACleanup();

     

    return 0;

    }

     

      

    面向无连接的套接字编程

    例子:

    客户端:

     

    #include "Winsock2.h"

    #pragma comment(lib,"ws2_32.lib")

    #include "stdio.h"

     

    int _tmain(int argc, _TCHAR* argv[])

    {

    //第一步:加载socket库函数

    //**********************************************************

    WORD wVersionRequested;

    WSADATA wsaData;

    int err;

     

    wVersionRequested = MAKEWORD( 1, 1 );

     

    err = WSAStartup( wVersionRequested, &wsaData );

    if ( err != 0 ) {                           

    return 0;

    }

     

    if ( LOBYTE( wsaData.wVersion ) != 1 ||

    HIBYTE( wsaData.wVersion ) != 1 ) {

    WSACleanup( );

    return 0;

    }

     

    //创建套接字

    SOCKET sockClient = socket(AF_INET,SOCK_DGRAM,0);

    SOCKADDR_IN sockSrv;

    sockSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

    sockSrv.sin_family = AF_INET ;

    sockSrv.sin_port = htons(6000);

     

    sendto(sockClient,"hello",strlen("hello")+1,0,(SOCKADDR*)&sockSrv,sizeof(SOCKADDR));

    closesocket(sockClient);

    WSACleanup();

    return 0;

    }

     

     

     

    服务器:

     

    #include "Winsock2.h"

    #pragma comment(lib,"ws2_32.lib")

     

    #include "stdio.h"

     

    int _tmain(int argc, _TCHAR* argv[])

    {

    //第一步:加载socket库函数

    //**********************************************************

    WORD wVersionRequested;

    WSADATA wsaData;

    int err;

     

    wVersionRequested = MAKEWORD( 1, 1 );

     

    err = WSAStartup( wVersionRequested, &wsaData );

     

    if ( err != 0 ) {                           

    return 0;

    }

     

    if ( LOBYTE( wsaData.wVersion ) != 1 ||

    HIBYTE( wsaData.wVersion ) != 1 ) {

    WSACleanup( );

    return 0;

    }

     

    //创建套接字

    SOCKET sockSrv = socket(AF_INET,SOCK_DGRAM,0);

    SOCKADDR_IN addSrv;

    addSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

    addSrv.sin_family = AF_INET ;

    addSrv.sin_port = htons(6000);

     

    bind(sockSrv,(SOCKADDR*)&addSrv,sizeof(SOCKADDR));

     

    SOCKADDR_IN addrClient;

    int len = sizeof(SOCKADDR);

    char recvBuf[100];

     

    recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);

    printf("%s\n",recvBuf);

    closesocket(sockSrv);

    WSACleanup();

    return 0;

    }

     

     

    1>test_udpclient.obj : error LNK2019: 无法解析的外部符号 __imp__closesocket@4,该符号在函数 _wmain 中被引用

    1>test_udpclient.obj : error LNK2019: 无法解析的外部符号 __imp__sendto@24,该符号在函数 _wmain 中被引用

    1>test_udpclient.obj : error LNK2019: 无法解析的外部符号 __imp__htons@4,该符号在函数 _wmain 中被引用

    1>test_udpclient.obj : error LNK2019: 无法解析的外部符号 __imp__inet_addr@4,该符号在函数 _wmain 中被引用

    1>test_udpclient.obj : error LNK2019: 无法解析的外部符号 __imp__socket@12,该符号在函数 _wmain 中被引用

    1>test_udpclient.obj : error LNK2019: 无法解析的外部符号 __imp__WSACleanup@0,该符号在函数 _wmain 中被引用

    1>test_udpclient.obj : error LNK2019: 无法解析的外部符号 __imp__WSAStartup@8,该符号在函数 _wmain 中被引用

     

    出现以上的情况时,解决方法:在cpp文件Include后添加 

    #pragma comment(lib,"ws2_32.lib")

    (责任编辑:admin)


    文章转自:http://www.seacha.com/article.php/knowledge/windows/mfc/2012/0928/2043.html

     

    展开全文
  • [MFC]UDP通信的简单实现

    万次阅读 2015-07-21 15:00:56
    1. UDP和TCP最大的区别:  1) TCP最大的特点就是面向连接、安全可靠,也就是说TCP通信必须要先建立连接,并且通信过程需要时时校验,如果数据有误需要重发;  2) UDP最大的特点就是面向无连接,不可靠,也就是说...
  • MFC TCP/UDP最经典例子

    热门讨论 2010-03-24 17:05:32
    MFC TCP/UDP最经典例子 我就是这么学会的 大家一起加油!
  • MFC工程通信经典实例,基于SOCKET UDP协议,有助于学习和理解UDP协议原理.
  • MFC]UDP通信的简单实现

    千次阅读 2018-04-13 13:18:34
    1. UDP和TCP最大的区别: 1) TCP最大的特点就是面向连接、安全可靠,也就是说TCP通信必须要先建立连接,并且通信过程需要时时校验,如果数据有误需要重发; 2) UDP最大的特点就是面向无连接,不可靠,也就是说不用...
  • boost库之udp client实例

    千次阅读 2017-05-18 14:00:22
    //UdpLinkClient.h//udp服务 #pragma once #include #include #include #include #include #include #include using boost::asio::ip::udp; #define UDP_DATA_PACKAGE_MAX_LENGTH 1024 //发送数据回调...
  • vs2013 MFC Socket UDP 简单聊天工具

    千次阅读 2015-11-26 17:36:08
    在一个解决方案中新建两个MFC对话框界面,两个界面都同时为客户端和服务器,代码内容除了 bind 绑定端口必须要绑定在不同的端口上,并且发送信息的端口两个界面互补对应。除此之外其他代码一样。 1、首先在对话框类...
  • 简单的基于UDP的客户端实例 MFC平台下编写,API的socket编程
  • 自己用MFC对话框程序实现的基于UDP的socket编程示例,分为客户端和服务端,客户端发送一个字符串,服务端接收。代码简单明了,无论是学习还是拿到自己的项目中使用都很好。
  • 利用MFC CAsyncSocket开发的的UDP Server,可接收和发送。程序启动就运行UDP Server,直接返回接收到的信息。
  • VC++使用CAsyncSocket实现UDP无连接的通信实例,程序分为UDPClient和UDPSever。服务端Socket需要设置本端的地址和端口号,另外指定接收端的IP 地址还有端口,若有数据发送,则会显示发送的字节数,也可中断发送。...
  • 内容索引:VC/C++源码,网络相关,UDP,协议,通讯 VC++ 基于UDP协议的网络通讯实例,C/S架构,在实例中,用户通过服务器端的程序定义一个屏幕上的几何圆,并将圆的X/Y坐标及半径信息发送至客户端,客户端接收到这些数据...
  • 基于MFC对话框的UDP简单聊天程序

    千次阅读 2014-10-12 07:43:31
    1、 2、 3、
  • MFC中利用CSocket实现UDP通信

    千次阅读 2012-12-19 14:42:42
    这两天一直在找MFC下用CSocket实现UDP通信,尝试了网上不少的资料都没有成功,可能是自己在什么地方出错了。最后参考http://www.cnblogs.com/nuaa/archive/2011/12/22/2298495.html顺利实现了。自己也顺便作一些总结...
  • UDP 组播 实例

    万次阅读 2014-02-22 10:49:00
    最近一直在做linux的网络,现在作个总结,陆续贴出来。 在网上搜了很多资料 ,其中周立发的...直接上代码吧,一个很简单udp 组播通信的例子,分别为服务器端和客户端的代码。 1、服务器端代码 (multi
  • UDP通信实例(2)--组播初探

    千次阅读 2019-02-24 19:00:52
    UDP组播要注意两点:1)组播收发两端的端口号要一致;2)加入组播的套接字必须绑定IP地址 INADDR_ANY,而不是所在计算机的具体IP,否则会有问题。 下面给一个例子,是从...
  • 内容索引:VC/C++源码,网络相关,UDP,Winsock VC++基于IP/UDP协议的sock编程实例源码,因为这前知道这种源码需要花钱才能下载,所以运用自己所学的VC知识自己写了一套,虽然不完善,但凑合能用,也希望高手们批评指正...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,004
精华内容 801
关键字:

mfcudp实例