2332|2

3

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于C# 上位机 与ARM 下位机 UDP连接问题 [复制链接]

本帖最后由 LS_lpy 于 2014-1-14 17:59 编辑

上位机界面
上位机UDP服务器C#代
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Net;
  10. using System.Net.Sockets;
  11. using System.Threading;
  12. using System.Collections;
  13. using System.IO;

  14. namespace ceshi2
  15. {
  16.     public partial class Form1 : Form
  17.     {
  18.         struct USER            //存放客户信息
  19.         {
  20.             public EndPoint endpoint;         
  21.             public string Name;
  22.         }
  23.         ArrayList clientlist;    //用户链表
  24.         Socket server;   //服务器
  25.         byte[] byteData = new byte[1024];  
  26.         public Form1()
  27.         {
  28.             CheckForIllegalCrossThreadCalls = false;
  29.             clientlist = new ArrayList();
  30.             InitializeComponent();
  31.             toolStripStatusLabel1.Text = null;  // 状态栏  可无视
  32.             textBoxIP.Text = "192.168.1.2";   //本地IP
  33.             textBoxPORT.Text = "1026"; //本地端口
  34.         }

  35.         private string GetIP()    //获取本地IP  无视
  36.         {
  37.             try
  38.             {
  39.                 string serverIP = textBoxIP.Text;
  40.                 return serverIP;
  41.             }
  42.             catch
  43.             {
  44.                 return "192.168.1.2";
  45.             }
  46.         }

  47.         private int GetPort()  //本地端口  无视
  48.         {
  49.             try
  50.             {
  51.                 string serverPort = textBoxPORT.Text;
  52.                 return Convert.ToInt32(serverPort);
  53.             }
  54.             catch
  55.             {
  56.                 return 1026;
  57.             }
  58.         }

  59.         private void Form1_Load(object sender, EventArgs e)
  60.         {

  61.         }

  62.         private void buttonStart_Click(object sender, EventArgs e)   //开始服务键 事件
  63.         {
  64.             try
  65.             {
  66.                 server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  67.                 IPEndPoint serverPoint = new IPEndPoint(IPAddress.Parse(this.GetIP()), this.GetPort());
  68.                 server.Bind(serverPoint);
  69.                 IPEndPoint senderIP = new IPEndPoint(IPAddress.Any, 0);
  70.                 EndPoint mysender = (EndPoint)senderIP;
  71.                 byteData = new byte[1024];
  72.                 server.BeginReceiveFrom(byteData, 0, byteData.Length, SocketFlags.None, ref mysender, new AsyncCallback(myReceive), mysender);
  73.                 toolStripStatusLabel1.Text = "服务已开启";
  74.                 if (listBoxKH.Items.Count <= 0)                     //可无视
  75.                 {
  76.                     buttonSend.Enabled = false;
  77.                     buttonGB.Enabled = false;
  78.                 }
  79.             }
  80.             catch (Exception ex)
  81.             {
  82.                 MessageBox.Show(ex.Message,"UdpTcpServer",MessageBoxButtons.OK,MessageBoxIcon.Error);
  83.             }
  84.         }
  85.         private void myReceive(IAsyncResult Data)  //接受信息   主要
  86.         {
  87.             try
  88.             {
  89.                 IPEndPoint SenderIP = new IPEndPoint(IPAddress.Any, 0);
  90.                 EndPoint mysender = (EndPoint)SenderIP;
  91.                 server.EndReceiveFrom(Data, ref mysender);
  92.                // string Msg = Encoding.Unicode.GetString(byteData);
  93.                 string Msg = Encoding.UTF8.GetString(byteData);
  94.                
  95.                 string[] QT = Msg.Split(new char[] { '|' });
  96.                 if (QT[0] == "login")     //login|*****  表示登入   **** 用户名
  97.                 {
  98.                     USER user = new USER();
  99.                     user.endpoint = mysender;
  100.                     user.Name = QT[1];
  101.                     clientlist.Add(user);
  102.                     listBoxKH.Items.Add(QT[1]);
  103.                     richTextBox1.AppendText("login:   " + user.Name+Environment.NewLine);
  104.                     buttonSend.Enabled = false;
  105.                     buttonGB.Enabled = false;
  106.                 }
  107.                 else if (QT[0] == "logout")// 用户退出   无视
  108.                 {
  109.                     int i=0;
  110.                     foreach (USER user in clientlist)
  111.                     {
  112.                         string strEndPoint = user.endpoint.ToString();
  113.                         string strSender = mysender.ToString();
  114.                         if (strEndPoint.Equals(strSender))
  115.                         {
  116.                             clientlist.RemoveAt(i);
  117.                             listBoxKH.Items.RemoveAt(i);
  118.                             richTextBox1.AppendText("logout:   " + user.Name + Environment.NewLine);
  119.                         }
  120.                         ++i;
  121.                     }
  122.                     //string strMsg = QT[1];
  123.                     // richTextBox1.AppendText(strMsg);
  124.                 }
  125.                 else if (QT[0] == "talk") // 交谈信息  无视先
  126.                 {
  127.                     richTextBox1.AppendText(QT[1]);
  128.                     string message = "talk|" + QT[1];
  129.                    // byteData = Encoding.Unicode.GetBytes(message);
  130.                     byteData = Encoding.UTF8.GetBytes(message);
  131.                     server.BeginSendTo(byteData, 0, byteData.Length, SocketFlags.None, mysender, new AsyncCallback(mySend), mysender);
  132.                 }
  133.                 byteData = new byte[1024];
  134.                 server.BeginReceiveFrom(byteData, 0, byteData.Length, SocketFlags.None, ref mysender, new AsyncCallback(myReceive), mysender);
  135.             }
  136.             catch (Exception e)
  137.             {
  138.                 MessageBox.Show(e.Message, "UdpTcpServer", MessageBoxButtons.OK, MessageBoxIcon.Error);
  139.             }
  140.         }

  141.         private void mySend(IAsyncResult Data)  // 发送信息
  142.         {
  143.             try
  144.             {
  145.                 server.EndSend(Data);

  146.             }
  147.             catch (Exception e)
  148.             {
  149.                 MessageBox.Show(e.Message, "UdpTcpServer", MessageBoxButtons.OK, MessageBoxIcon.Error);
  150.             }
  151.         }

  152.         private void buttonSend_Click(object sender, EventArgs e)       //发送键事件
  153.         {
  154.             if (listBoxKH.SelectedItems.Count > 0)
  155.             {
  156.                 if (richTextBox2.Text.Length > 0)
  157.                 {
  158.                     string message = "talk|" + "server:" + richTextBox2.Text + "\n";
  159.                     byte[] DataSend = new byte[1024];
  160.                    // DataSend = Encoding.Unicode.GetBytes(message);
  161.                     DataSend = Encoding.UTF8.GetBytes(message);
  162.                     foreach (string ToUser in listBoxKH.SelectedItems)
  163.                     {
  164.                         foreach (USER user in clientlist)
  165.                         {
  166.                             if (user.Name.ToString().Trim() == ToUser.Trim())
  167.                             {
  168.                                 server.BeginSendTo(DataSend, 0, DataSend.Length, SocketFlags.None, user.endpoint, new AsyncCallback(mySend), user.endpoint);
  169.                             }

  170.                         }
  171.                     }
  172.                     richTextBox1.AppendText("Server:" + richTextBox2.Text + Environment.NewLine);
  173.                     richTextBox2.Text = null;
  174.                 }
  175.                 else
  176.                 {
  177.                     MessageBox.Show("不能发送空信息!");
  178.                 }
  179.             }
  180.             else
  181.             {
  182.                 MessageBox.Show("请选择发送的用户!");
  183.             }
  184.             buttonGB.Enabled = false;
  185.             buttonSend.Enabled = false;

  186.         }

  187.         private void buttonGB_Click(object sender, EventArgs e)  //广播键 事件   无视先
  188.         {
  189.             string message = "talk|" + "Server:" + richTextBox2.Text + "\n";
  190.             byte[] DataSend = new byte[1024];
  191.            // DataSend = Encoding.Unicode.GetBytes(message);
  192.             DataSend = Encoding.UTF8.GetBytes(message);
  193.             foreach (USER user in clientlist)
  194.             {
  195.                 EndPoint strEndPiont = user.endpoint;
  196.                 server.BeginSendTo(DataSend, 0, DataSend.Length, SocketFlags.None, strEndPiont, new AsyncCallback(mySend), strEndPiont);
  197.             }
  198.             richTextBox1.AppendText("Server:" + richTextBox2.Text + Environment.NewLine);
  199.             richTextBox2.Text = null;
  200.             DataSend = null;
  201.             buttonGB.Enabled = false;
  202.             buttonSend.Enabled = false;
  203.         }

  204.         private void richTextBox2_TextChanged(object sender, EventArgs e)  //  无视
  205.         {
  206.             if (richTextBox2.Text !=null)
  207.             {
  208.                 buttonGB.Enabled = true;
  209.                 buttonSend.Enabled = true;
  210.             }
  211.             else
  212.             {
  213.                 buttonGB.Enabled = false;
  214.                 buttonSend.Enabled = false;
  215.             }
  216.         }

  217.     }
  218. }
复制代码

码:
下位机 ARM代码:
#include "string.h"        
#include "inc/lm3s9b96.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_nvic.h"
#include "inc/hw_types.h"
#include "inc/hw_i2c.h"
#include "driverlib/i2c.h"
#include "driverlib/ethernet.h"
#include "driverlib/flash.h"
#include "driverlib/gpio.h"
#include "driverlib/timer.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
#include "driverlib/systick.h"
#include "driverlib/uart.h"
#include "driverlib/watchdog.h"
#include "utils/locator.h"
#include "utils/lwiplib.h"
#include "utils/uartstdio.h"
#include "utils/ustdlib.h"
#include "drivers/set_pinout.h"
#include "utils/uartstdio.h"
#include "drivers/kitronix320x240x16_ssd2119_8bit.h"

#define SYSTICKHZ       100
#define SYSTICKMS       (1000 / SYSTICKHZ)
#define SYSTICKUS       (1000000 / SYSTICKHZ)
#define SYSTICKNS       (1000000000 / SYSTICKHZ)

unsigned long ulUser0,ulUser1;
unsigned char pucMACArray[8];
unsigned char UdpData[]="login|woshica";
struct udp_pcb *Pcb1;
struct ip_addr ipaddr1;
struct pbuf *p;

#ifdef DEBUG
void
__error__(char *pcFilename, unsigned long ulLine)
{
}
#endif

void
SysTickIntHandler(void)
{
    lwIPTimer(SYSTICKMS);
}

void AnimTimerIntHandler(void)
{
        TimerIntClear(TIMER2_BASE, TIMER_TIMA_TIMEOUT);
}

void lwIPHostTimerHandler(void)
{
}

void init(void)
{
        SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);
  PinoutSet();
        Kitronix320x240x16_SSD2119Init();
        
        SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH);
        SysCtlPeripheralReset(SYSCTL_PERIPH_ETH);
        
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
        GPIOPinTypeEthernetLED(GPIO_PORTF_BASE,GPIO_PIN_2|GPIO_PIN_3);
        GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_3);
        
        SysTickPeriodSet(SysCtlClockGet()/SYSTICKHZ);
        SysTickEnable();
        SysTickIntEnable();
        IntMasterEnable();
        
        FlashUserGet(&ulUser0,&ulUser1);
        pucMACArray[0]=((ulUser0>>0)&0xff);
        pucMACArray[1]=((ulUser0>>8)&0xff);
        pucMACArray[2]=((ulUser0>>16)&0xff);
        pucMACArray[3]=((ulUser1>>0)&0xff);
        pucMACArray[4]=((ulUser1>>8)&0xff);
        pucMACArray[5]=((ulUser1>>16)&0xff);
        
        lwIPInit(pucMACArray,0xC0A80103,0,0,IPADDR_USE_STATIC);        
}

int main(void)
{
        init();
        p=pbuf_alloc(PBUF_RAW,sizeof(UdpData),PBUF_RAM);
        p->payload=(void*)UdpData;
        p->flage=NULL;
        IP4_ADDR(&ipaddr1,192,168,1,2);
        Pcb1=udp_new();
        udp_bind(Pcb1,IP_ADDR_ANY,1025);  //本地端口 192.168.1.3:1025
        udp_connect(Pcb1,&ipaddr1,1026);  //连接PC 192.168.1.2:1026
        
        while(1)
        {
                udp_send(Pcb1,p);//循环发送login|woshica 到192.168.1.2 : 1026
                SysCtlDelay(SysCtlClockGet()/3);
        }
        
        
}



















结果发现C#上位机与TCP调试助手能信息互发,ARM和TCP调试助手也能信息互发  但是C#与ARM连不上? 大神给看看  问题出哪了
此帖出自ARM技术论坛
点赞 关注
 

回复
举报

3

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
上位机本地IP192.168.1.2 端口 1026   下位机IP 192.168.1.3 端口 1025
此帖出自ARM技术论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
private void myReceive(IAsyncResult Data) 这个函数进不去   为什么呢
此帖出自ARM技术论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表