首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于C#程序获取udp端口数据的有关问题

2012-02-28 
求助关于C#程序获取udp端口数据的问题今天用C#取udp端口数据又遇到个问题,数据是取出来了,但是数据一长点,

求助关于C#程序获取udp端口数据的问题
今天用C#取udp端口数据又遇到个问题,数据是取出来了,但是数据一长点,就只能取半截了。完整的应该是以\final\\queryid\1.1结尾,还望各位高手帮忙看看。
源代码如下,运行之后可以直接测试。感谢感谢!!

PS:5555,没分了,只能给20以表感激~~~

using   System;
using   System.Data;
using   System.Configuration;
using   System.Collections;
using   System.Web;
using   System.Web.Security;
using   System.Web.UI;
using   System.Web.UI.WebControls;
using   System.Web.UI.WebControls.WebParts;
using   System.Web.UI.HtmlControls;
using   System.Text;
using   System.IO;
using   System.Net;
using   System.Net.Sockets;
using   System.Collections.Specialized;

public   partial   class   server   :   System.Web.UI.Page
{
        protected   void   Page_Load(object   sender,   EventArgs   e)
        {
                                int   port   =   1717;
                                string   host   =   "222.73.220.41 ";
                                IPAddress   ip   =   IPAddress.Parse(host);
                                IPEndPoint   ipe   =   new   IPEndPoint(ip,   port);
                                Socket   c   =   new   Socket(AddressFamily.InterNetwork,   SocketType.Dgram,   ProtocolType.Udp);
                                c.Connect(ipe);
                                Console.WriteLine( "connected! ");
                                string   sendStr   =   "\\info\\ ";

                                byte[]   bs   =   Encoding.Default.GetBytes( "\\info\\ ");
                                c.Send(bs,   bs.Length,   0);
                                string   recvStr   =   " ";
                                byte[]   recvBytes   =   new   byte[20000000];
                                int   bytes;
                                bytes   =   c.Receive(recvBytes,   recvBytes.Length,   0);

                                recvStr   +=   Encoding.ASCII.GetString(recvBytes,   0,   bytes);

                                recvStr   =   recvStr.Replace(@ "\final\\queryid\1.1 ", "\\ ");


                                recvStr   =   recvStr.Replace(@ "\hostname ",   "hostname ");
                                string[]   arr   =   recvStr.Split( '\\ ');
                                StringDictionary   sd   =   new   StringDictionary();
                                for   (int   i   =   0;   i   <   arr.Length   /   2;   i   +=   2)
                                {
                                                sd.Add(arr[i],   arr[i   +   1]);
                                }
                                Response.Write(recvStr);
                                c.Close();
        }

}

[解决办法]
接受的逻辑有点不对。

你用小一点的缓冲区,多次接受。 系统内部,应该有个最大限度。

byte[] recvBytes = new byte[2048];
int bytes;
do
{
bytes = c.Receive(recvBytes, recvBytes.Length, 0);
}
while(bytes > 0);

strRecv += System.Text.Encoding.ASCII.GetString(recvBytes, 0, bytes);
..........


[解决办法]
byte[] b= new byte[2048];
c.ReceiveFrom(b, 0, b.Length, SocketFlags.None, ref ipe);用这个试试

热点排行