zhu_zy123 2020-09-23 15:48 采纳率: 0%
浏览 394
已采纳

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 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化