在UdpClient类的构造函数中有一种重载的形式UdpClient(port),msdn中只解释说此处的port是用于通信的本地端口。我不太清楚这里设置的这个端口是在什么情况下才使用,是只用于本地接收时的监听端口,还是在发送时也从该端口发送?我现在有一主机只是发送数据包,不接收,那在使用UdpClient时还用设置这个本地端口吗?还有就是我在另一台主机上只接收这个主机发来的包,那么接收端的UdpClient在绑定远程的IPEndPoint时该如何设置端口?请高手解答,谢谢了。

解决方案 »

  1.   

    给你一个Send()的方法,用于将主机获取的消息,通过IP地址和端口号发送给远程客户端。
    public void Send(System.Net.IPAddress Host, int Port, byte[] Data)
            {
                try
                {
                    IPEndPoint server = new IPEndPoint(Host, Port);
                    UDP_Server.Send(Data, Data.Length, server);
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.ToString());
                }
            } 
      

  2.   

    楼上的方法我知道,在Send方法中设置的server是远程主机,我就是想知道这个时候发送端的本地主机该怎么设置,上面代码中的UDP_Server对象在初始化的时候设置本地的端口了吗?这个发出去的信息是通过本地主机上一个编程指定的端口发出去的还是由系统自动选定任意一个端口向外发送?
      

  3.   

    我这里是用短信猫来实现短信群发的,主要调用dllforvc.dll动态链接库。我把代码贴给你把 你自己找找。
    GSM类主要封装了操作短信猫的各种方法。using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.InteropServices;
    namespace SMS.BaseClass
    {
        class GSM
        {
            //初始化gsm modem,并连接gsm modem
            [DllImport("dllforvc.dll",
                 EntryPoint = "GSMModemInitNew",
                 CharSet = CharSet.Ansi,
                 CallingConvention = CallingConvention.StdCall)]
            public static extern bool GSMModemInitNew(
                string device,
                string baudrate,
                string initstring,
                string charset,
                bool swHandshake,
                string sn);        //获取短信猫新的标识号码
            [DllImport("dllforvc.dll",
                 EntryPoint = "GSMModemGetSnInfoNew",
                 CharSet = CharSet.Ansi,
                 CallingConvention = CallingConvention.StdCall)]
            public static extern string GSMModemGetSnInfoNew(string device, string baudrate);        //获取当前通讯端口
            [DllImport("dllforvc.dll",
                 EntryPoint = "GSMModemGetDevice",
                 CharSet = CharSet.Ansi,
                 CallingConvention = CallingConvention.StdCall)]
            public static extern string GSMModemGetDevice();        //获取当前通讯波特率
            [DllImport("dllforvc.dll",
                 EntryPoint = "GSMModemGetBaudrate",
                 CharSet = CharSet.Ansi,
                 CallingConvention = CallingConvention.StdCall)]
            public static extern string GSMModemGetBaudrate();        //断开连接并释放内存空间
            [DllImport("dllforvc.dll",
                 EntryPoint = "GSMModemRelease",
                 CharSet = CharSet.Ansi,
                 CallingConvention = CallingConvention.StdCall)]
            public static extern void GSMModemRelease();        //取得错误信息
            [DllImport("dllforvc.dll",
                 EntryPoint = "GSMModemGetErrorMsg",
                 CharSet = CharSet.Ansi,
                 CallingConvention = CallingConvention.StdCall)]
            public static extern string GSMModemGetErrorMsg();        //发送短信息
            [DllImport("dllforvc.dll",
                 EntryPoint = "GSMModemSMSsend",
                 CharSet = CharSet.Ansi,
                 CallingConvention = CallingConvention.StdCall)]
            public static extern bool GSMModemSMSsend(
                string serviceCenterAddress,
                int encodeval,
                string text,
                int textlen,
                string phonenumber,
                bool requestStatusReport);        //接收短信息返回字符串格式为:手机号码|短信内容||手机号码|短信内容||
            //RD_opt为1接收短信息后不做任何处理,0为接收后删除信息
            [DllImport("dllforvc.dll",
                 EntryPoint = "GSMModemSMSReadAll",
                 CharSet = CharSet.Ansi,
                 CallingConvention = CallingConvention.StdCall)]
            public static extern string GSMModemSMSReadAll(int RD_opt);
        }
    }