zhu_zy123 2020-09-23 15:48 采纳率: 87.5%
浏览 392
已采纳

C#与C++如何实现UDP通信

1.背景
两个程序(一个是C#做成的窗体程序,一个是C++做成的窗体程序)
2.问题:
C#与C++如何实现UDP通信??????????求大佬帮忙根据图片显示,做个sample程序,代码中最好能填加上注释(本人没学过这一块内容),求大佬帮帮忙!!!!!!!!!!!!!求帮忙!!!求帮忙!!!
3.想要的效果
左边这个界面上(用C#做成)的TextBox中输入“你好吗?”点击发送,右边的BB界面上(用C++做成)的能显示“你好吗?”,即实现UDP通信
4.相关图片
图片说明

  • 写回答

3条回答 默认 最新

  • 九头蛇daze 2020-09-24 15:02
    关注

    c#发送控制台程序代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Net.Sockets;
    using System.Net;
    using System.Net.NetworkInformation;
    
    namespace ConsoleApplication3
    {
        class Program
        {
            static void Main(string[] args)
            {
                string sendString = null;//要发送的字符串  
                byte[] sendData = null;//要发送的字节数组  
                UdpClient client = null;
    
                IPAddress remoteIP = IPAddress.Parse("127.0.0.1");
                int remotePort = 8080;
                IPEndPoint remotePoint = new IPEndPoint(remoteIP, remotePort);//实例化一个远程端点  
    
                while (true)
                {
                    sendString = Console.ReadLine();
                    sendData = Encoding.Default.GetBytes(sendString);
    
                    client = new UdpClient();
                    client.Send(sendData, sendData.Length, remotePoint);//将数据发送到远程端点  
                    client.Close();//关闭连接  
                }
            }  
    
        }
    }
    
    

    c++接收控制台代码:

    #include <Winsock2.h>
    #include <stdio.h>
    #pragma  comment(lib, "ws2_32.lib")  
    void main(){
        WORD wVersionRequested;
        WSADATA wsaData;
        int err;
        wVersionRequested = MAKEWORD(1, 1);
        err = WSAStartup(wVersionRequested, &wsaData);
        if (err != 0) {
            return;
        }
        if (LOBYTE(wsaData.wVersion) != 1 ||
            HIBYTE(wsaData.wVersion) != 1) {
            WSACleanup();
            return;
        }
    
        //创建套接字
        SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);
        //创建地址结构体.
        SOCKADDR_IN addrSrv;
        addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
        addrSrv.sin_family = AF_INET;
        addrSrv.sin_port = htons(6000);
        //绑定套接字和地址.
        bind(sockSrv, (SOCKADDR *)&addrSrv, sizeof(SOCKADDR));
        char recvBuf[100] = {0};
        char sendBuf[100];
        char tempBuf[200];
        SOCKADDR_IN addrClient;
        int len = sizeof(SOCKADDR);
        while (1){
            //接收数据.
            recvfrom(sockSrv, recvBuf, 100, 0, (SOCKADDR *)&addrClient, &len);
            if ('q' == recvBuf[0]){
                sendto(sockSrv, "q", 1, 0, (SOCKADDR *)&addrClient, sizeof(SOCKADDR));
                printf("chat end ! \n");
                break;
            }
    
            sprintf(tempBuf, "%s say: %s", inet_ntoa(addrClient.sin_addr), recvBuf);
            printf("%s\n", tempBuf);
            printf("please input data:\n");
            gets(sendBuf);
            //发送数据.
            sendto(sockSrv, sendBuf, 100, 0, (SOCKADDR*)&addrClient, sizeof(SOCKADDR));
        }
        //关闭套接字.
        closesocket(sockSrv);
        //关闭套接字库.
        WSACleanup();
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 算法使用了tf-idf,用手肘图确定k值确定不了,第四轮廓系数又太小才有0.006088746097507285,如何解决?(相关搜索:数据处理)
  • ¥15 彩灯控制电路,会的加我QQ1482956179
  • ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传
  • ¥15 (关键词-电路设计)
  • ¥15 如何解决MIPS计算是否溢出
  • ¥15 vue中我代理了iframe,iframe却走的是路由,没有显示该显示的网站,这个该如何处理
  • ¥15 操作系统相关算法中while();的含义
  • ¥15 CNVcaller安装后无法找到文件
  • ¥15 visual studio2022中文乱码无法解决
  • ¥15 关于华为5g模块mh5000-31接线问题