我在ASP.NET中用C#建立了一个SOCKET连接,抓包发现,与服务器建立连接,发送数据,服务器返回数据都是成功的,但我的问题是,在ASP.NET程序中接收不到服务器返回的数据,请哪位高手帮我看看是不是代码哪里写错了!
public partial class _Default : System.Web.UI.Page 
{
    protected void Button1_Click(object sender, EventArgs e) 
{
//组合出远程终结点 (一个套接字)
IPEndPoint hostEP = new IPEndPoint(System.Net.IPAddress.Parse("114.79.121.14"), 5000);
System.Web.HttpContext.Current.Response.Write(hostEP);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try 

socket.Connect(hostEP); 
}
string sendStr1 = "0020000100063"
byte[] bytesSendStr1=new byte[1024]; 
bytesSendStr1=Encoding.ASCII.GetBytes(sendStr1);
System.Web.HttpContext.Current.Response.Write(sendStr1);
try
{
   socket.Send(bytesSendStr1, bytesSendStr1.Length, 0);
}
catch (Exception xe)
{
    System.Web.HttpContext.Current.Response.Write(xe.Message);}
string recvStr=""; 
byte[] recvBytes=new byte[1024]; 
int bytes=0;
while(true)
{   bytes = socket.Receive(recvBytes);
if(bytes<=0) 
break; 
recvStr =Encoding.ASCII.GetString(recvBytes,0,bytes);
System.Web.HttpContext.Current.Response.Write(recvStr);
}
}
}

解决方案 »

  1.   

    while (true)
                {
                    Thread.Sleep(100);
                    accSock = sock.Accept();
                    if (accSock.Connected)
                    {
                        Byte[] Rec = new Byte[1024 * 100];
                        NetworkStream netStream = new NetworkStream(accSock);
                        int length = netStream.Read(Rec, 0, Rec.Length);
                        if (length >= 1024 * 100)
                        {
                            Console.WriteLine("一次消息太长");
                            return;
                        }
                        string recMessage = System.Text.Encoding.BigEndianUnicode.GetString(Rec);
                        recMessage = recMessage.Substring(0, length);
                        recMessage = recMessage.Replace("\0", "");
                    }
                 }
      

  2.   

    try 

    socket.Connect(hostEP); 
    }
    catch(Exception e)
    {
     Log error
    }
    finnaly
    {
     socket.Close();
    ....
      release socket resource...
    }
      

  3.   

    代码上,没有什么错误,只是
    你如何保证第一次Receive就不能是返回0?
    TCP的Receive不见得每次都能接到数据!
    如果你在Receive前每次Sleep(100)的话,估计情况就不一样了!
    另外,你也没有进行连接检测,万一连接失败怎么办?最好多捕捉一下异常情况。