关于Socket的Receive问题。
请问在.NET中进行Socket编程,有没有类似于Delphi中的OnRead事件?
就是说一接收到客户端(服务器端)发送过来的数据就触发的事件?
现在使用Socket发送数据没问题了,但是接收数据应该如何做?可否根据以下要求给出相应代码(JavaScript部分的代码可以不写)?
比如说在index.aspx页,当点击一个按钮后开始Socket.Send,然后弹出一个新的Web窗口,窗口包含receive.aspx页。当接收到服务器端发送过来的数据时,这个Web窗口关闭。
我的代码是这样写的,可是弹不出新的Web页:
【在ucSocket.cs中:】
public string SocketReceive() {
Socket s = ConnectSocket();
byte[] msg = new byte[128];
s.Receive(msg, 0, s.Available, SocketFlags.None);
s.Shutdown(SocketShutdown.Both);
s.Close();
return Encoding.ASCII.GetString(msg);
}
【在receive.aspx.cs中:】
private void Page_Load(object sender, System.EventArgs e) {
ucSocket s = new ucSocket();
//如果去掉以下代码则能弹出新的Web页
string msg = s.SocketReceive();
if(msg==null) {
Response.Write("wait...");
}
else {
Response.Write("done!");
}
}
问题点数:20、回复次数:1Top
1 楼gOODiDEA(无语)回复于 2003-10-04 17:12:31 得分 20
if(msg==null) {
Response.Write("<script>window.open('x.htm')</script>");
}
else {
Response.Write("<script>window.open('y.htm')</script>"); }
}
Top
2 楼Namo(烟燃和鱼)回复于 2003-10-04 17:21:07 得分 0
唉,不是这个意思……
刚才弄懂了,在MSDN的代码示例上有这么一段:
// Blocks until send returns.
int i = s.Send(msg, 0, msg.Length, SocketFlags.None);
// Blocks until read returns.
byte[] bytes = new byte[1024];
s.Receive(bytes, 0, s.Available, SocketFlags.None);
没注意看MSDN的注释,真想shit自己一下。怪不得MSDN上的例子都是Send和Receive写在一起的。
Top




