C# SilverLight Socket 客户端 核心代码(此代码有BUG只能收到一次数据)
来源:互联网 发布:南京淘宝运营培训 编辑:程序博客网 时间:2024/04/28 12:44
public Page()
{
InitializeComponent();
SocketOper Socket操作 = new SocketOper();
Socket操作.SocketReceiveActive += new SocketOper.SokcetReceiveEventHandler(Socket操作_SocketReceiveActive);
}
string currSocketStr = "";
void Socket操作_SocketReceiveActive(object sender, SocketOper.SocketReceiveEventArgs e)
{
currSocketStr = e.得到当前的字符串;
Dispatcher.BeginInvoke(更新txt);
}
void 更新txt()
{
tt.Text = currSocketStr;
}
}
/// <summary>
/// Socket 操作类
/// 用于处理
/// 得到数据 请使用
/// SocketReceiveActive 事件
/// </summary>
public class SocketOper
{
/// <summary>
/// 处理当前 Socket 的数据
/// 当默认为 null
///
/// </summary>
System.Net.Sockets.Socket Socket对像用于处理 = null;
/// <summary>
/// Socket 异步事件参数 对像
/// </summary>
System.Net.Sockets.SocketAsyncEventArgs Socket异步事件参数对像 = null;
#region 新建一个事件
/// <summary>
/// 为 SokcetOpet 接收数据
/// 事件提供数据
/// </summary>
public class SocketReceiveEventArgs : EventArgs
{
private string _得到当前的字符串 = "";
/// <summary>
/// 得到当前的字符串
/// </summary>
public string 得到当前的字符串
{
get { return _得到当前的字符串; }
}
public SocketReceiveEventArgs(string Sokcet数据)
{
_得到当前的字符串 = Sokcet数据;
}
}
/// <summary>
/// 表示将处理当前类 Socek 接收数据 事件的方法。
/// </summary>
/// <param name="sender">事件源</param>
/// <param name="e">包含事件数据的 SocketReceiveEventArgs</param>
public delegate void SokcetReceiveEventHandler(object sender, SocketReceiveEventArgs e);
/// <summary>
/// 定义当前 Socket 接收数据的事件
/// 用此事件可以得到当前 Socket 的数据
/// </summary>
public event SokcetReceiveEventHandler SocketReceiveActive;
#endregion
/// <summary>
/// 构造函数
/// 初始化 Socket 及联接
/// </summary>
public SocketOper()
{
//endpoint 对像
DnsEndPoint EndPoint = new DnsEndPoint(Application.Current.Host.Source.DnsSafeHost, 4530);
///新的 TCP Socket对像
Socket对像用于处理 = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
///Socket 异步事件参数 对像
Socket异步事件参数对像 = new System.Net.Sockets.SocketAsyncEventArgs();
//设定异步对像的属性
Socket异步事件参数对像.RemoteEndPoint = EndPoint;
Socket异步事件参数对像.UserToken = Socket对像用于处理;
///数据完成
Socket异步事件参数对像.Completed += new EventHandler<System.Net.Sockets.SocketAsyncEventArgs>(Socket异步事件参数对像_Completed);
//联接
Socket对像用于处理.ConnectAsync(Socket异步事件参数对像);
}
/// <summary>
/// 发送对像完成
/// 联接完成
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void Socket异步事件参数对像_Completed(object sender, System.Net.Sockets.SocketAsyncEventArgs e)
{
//联接成功
if (e.SocketError == SocketError.Success)
{
byte[] Socket数据 = new byte[1024];//1K
e.SetBuffer(Socket数据, 0, Socket数据.Length);
//删除当前的事件
e.Completed -= new EventHandler<SocketAsyncEventArgs>(Socket异步事件参数对像_Completed);
//当Socket完成时
//接收数据
e.Completed += new EventHandler<SocketAsyncEventArgs>(OnSocketReceive);
//接收数据
((Socket)(e.UserToken)).ReceiveAsync(e);
}
else
{
//引 Alert 的框子
System.Windows.Browser.HtmlPage.Window.Alert(e.SocketError.ToString());
}
}
/// <summary>
/// 接收 Socket 的数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void OnSocketReceive(object sender, SocketAsyncEventArgs e)
{
//新建一个新的 String Reader 对像
StringReader Sr = null;
#region 取得收到的信息
try
{
//得到发过来的 Socket 数据据
string data字符串数据 = System.Text.Encoding.UTF8.GetString(e.Buffer, e.Offset, e.BytesTransferred);
Sr = new StringReader(data字符串数据);
//将当前的 Socket 数据传入事件的数据源当中
SocketReceiveEventArgs SokcetReceiveEvent = new SocketReceiveEventArgs(data字符串数据);
//引起事件
//注册事件
SocketReceiveActive(this, SokcetReceiveEvent);
}
catch(Exception ex)
{
//将当前的 Socket 数据传入事件的数据源当中
SocketReceiveEventArgs SokcetReceiveEvent = new SocketReceiveEventArgs(ex.ToString());
//引起事件
//注册事件
SocketReceiveActive(this, SokcetReceiveEvent);
}
finally
{
Sr = null;
Sr.Close();
Sr.Dispose();
}
#endregion
//继续得到 更多的 Socket 数据
Socket socket = (Socket)e.UserToken;
socket.ReceiveAsync(e);
}
/// <summary>
/// 发送指定的数据
/// </summary>
/// <param name="str">传入当前的字符串</param>
/// <returns></returns>
//public bool SocketSend(string str)
//{
// //byte[] bytes = (byte[])e.UserToken;
// //SocketAsyncEventArgs sendArgs = new SocketAsyncEventArgs();
// //sendArgs.SetBuffer(bytes, 0, bytes.Length);
// //sendArgs.Completed += OnSendCompleted;
// //socket.SendAsync(sendArgs);
// ///得到当前的标识
// Socket异步事件参数对像.UserToken = System.Text.Encoding.UTF8.GetBytes(str);
// //设定当前的 字节
// Socket异步事件参数对像.SetBuffer((byte[])Socket异步事件参数对像.UserToken, 0, ((byte[])Socket异步事件参数对像.UserToken).Length);
// //发送数据
// Socket对像用于处理.SendAsync(Socket异步事件参数对像);
// return true;
//}
/// <summary>
/// 关闭当前 Socket联接
/// </summary>
public void SocketClose()
{
Socket对像用于处理.Close();
}
}
- C# SilverLight Socket 客户端 核心代码(此代码有BUG只能收到一次数据)
- C# Socket通信 客户端 服务器端代码
- 同步Socket客户端代码
- socket客户端代码
- C# socket 服务端与客户端通信演示代码
- C# socket 服务端与客户端通信演示代码
- MFC socket网络通讯核心代码
- 代码有BUG--进来看看
- 一款有bug的动画框架及核心代码的提取
- socket的客户端测试代码
- C#简单爬虫核心代码
- C#模拟登陆核心代码
- c#如何使用socket发送一条记录再接收一条记录,服务器端及客户端如何编写,初学。。最好有代码,谢谢!
- PHP,一个IP只能访问一次的代码
- Ionic controller里的代码只能运行一次
- 主流视频客户端核心代码的实现
- Java Socket聊天程序核心代码讲解
- Silverlight中JS访问C#代码学习
- 脱壳的艺术
- 五舍六入
- 这是我的屁股
- java保留两位小数
- js大全
- C# SilverLight Socket 客户端 核心代码(此代码有BUG只能收到一次数据)
- js校验
- 数据库开发21条规则
- php里如何使用fckeditor
- 数据库设计14技巧
- 数据库设计方法、规范与技巧
- Darkstar: The Java Game Server(1)
- 单链表的反转
- SQL SERVER 2005 新增的几个常用的函数