◥〓★〓◤-在线等待(QQ:9531511) 一个超难的问题,请版主予以解答或者其他有能力解决者(关于在IE中网页中嵌入.NET Windows 控件的难题)
这是一个示例程序,只是为了证明这个问题的存在性,(我怀疑这个是 Microsoft 的 Bug),这是一个嵌入在网页的Socket 通讯程序
我有两个Socket 服务器程序, 一个程序是侦听UDP 消息, 一个是侦听 TCP 消息
客户端是放在网页中的控件,注意 客户端的.NET 的安全性我已经设置成完全信任,所以应该不是安全性的问题
问题:
如果这个控件放在Web中,那么这两个客户端发送第一条消息的时候非常慢(大概2分钟后才发送成功),但是可以发送成功, 以后发送的消息就很快了!
如果这个控件放在WinForm中,发送消息很正常
代码如下:
TcpServer.cs
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace TcpServer
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
try
{
Socket server = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPEndPoint ipep = new IPEndPoint(IPAddress.Any,5200);
server.Bind(ipep);
server.Listen(10);
Console.WriteLine("服务器套接字开始侦听......");
while(true)
{
Socket Client = server.Accept();
Console.WriteLine("发现一个客户端......");
byte[] buffer = new byte[1024];
Console.WriteLine("正在接收数据......");
int recv = Client.Receive(buffer);
Console.WriteLine(Encoding.Default.GetString(buffer,0,recv));
Console.WriteLine("正在发送数据......");
Client.Send(Encoding.Default.GetBytes(DateTime.Now.ToString()));
Client.Close();
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message + "\n" + ex.StackTrace);
}
}
}
}
//----------------------------------------------------------------------------------------
UdpServer.cs
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace UdpServer
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
Socket server = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
IPEndPoint ipep = new IPEndPoint(IPAddress.Any,5201);
server.Bind(ipep);
IPEndPoint sender = new IPEndPoint(IPAddress.Any,0);
EndPoint Remote = (EndPoint)sender;
while(true)
{
byte[] buffer = new byte[1024];
Console.WriteLine("正在等待数据......");
int recv = server.ReceiveFrom(buffer,ref Remote);
Console.WriteLine("接收到数据......");
Console.WriteLine(Encoding.Default.GetString(buffer,0,recv));
Console.WriteLine("正在发送数据......");
server.SendTo(Encoding.Default.GetBytes(DateTime.Now.ToString()),Remote);
Console.WriteLine("数据发送完毕......");
}
}
}
}
//---------------------------------------------------------------------------------------
TcpClientControl.cs
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace Control
{
public class UserControl1 : System.Windows.Forms.UserControl
{
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.Button button1;
...........................
...........................
private void button1_Click(object sender, System.EventArgs e)
{
try
{
Socket client = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.10.6"),5200);
client.Connect(ipep);
client.Send(Encoding.Default.GetBytes(this.textBox1.Text.Trim()));
byte[] buffer = new byte[1024];
int recv = client.Receive(buffer);
this.textBox2.Text = Encoding.Default.GetString(buffer,0,recv);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message + "\n" + ex.StackTrace);
}
}
}
}
//-------------------------------------------------------------------------------------
UdpClientControl.cs
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace UdpControl
{
public class UserControl1 : System.Windows.Forms.UserControl
{
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.TextBox textBox1;
.....................................................
.....................................................
private void button1_Click(object sender, System.EventArgs e)
{
byte[] buffer = new byte[1024];
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.10.6"),5201);
Socket server = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
server.SendTo(Encoding.Default.GetBytes(this.textBox1.Text.Trim()),ipep);
IPEndPoint Sender = new IPEndPoint(IPAddress.Any,0);
EndPoint Remote = (EndPoint)Sender;
int recv = server.ReceiveFrom(buffer,ref Remote);
this.textBox2.Text = Encoding.Default.GetString(buffer,0,recv);
}
}
}
//-------------------------------------------
网页代码.....
,.......