九五二七

导航

公告

随笔档案

最新评论

统计

常用链接

阅读排行榜

评论排行榜

2012年1月5日 #

C#网络编程(Socket)

哎,最近看园子中的文章,感触良多!

 

private static Socket sokWatch = null;//定义一个套接字
public static Dictionary<string, Connection> dicList = Connection.dicList;//保存Client的字典
private static byte[] buffer = new byte[1024 * 1024];//接收数据的缓冲区
private delegate string AddHandle(ClientModel cModel);//执行业务逻辑的委托

private void StartListen(string ip, int port, int num)
{
sokWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sokWatch.Bind(new IPEndPoint(IPAddress.Parse(ip), port));
sokWatch.Listen(num);
sokWatch.BeginAccept(new AsyncCallback(ClientAccepted), sokWatch);
}

private void ClientAccepted(IAsyncResult ar)
{
var socket = ar.AsyncState as Socket;
var client = socket.EndAccept(ar);
Connection conn = new Connection(client);
if (!dicList.ContainsKey(client.RemoteEndPoint.ToString()))
{
dicList.Add(client.RemoteEndPoint.ToString(), conn);
}
HeartbeatClient(client);
client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), client);
socket.BeginAccept(new AsyncCallback(ClientAccepted), socket);

private void ReceiveMessage(IAsyncResult ar)
{
var socket = ar.AsyncState as Socket;
var length = socket.EndReceive(ar);
var message = Encoding.UTF8.GetString(buffer, 0, length);
}

 

//实现这个类是为了支持多Client
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace Communica
{
public class Connection
{
Socket sokWatch = null;
bool isRec = true;
public static Dictionary<string, Connection> dicList = new Dictionary<string, Connection>();
public Connection(Socket soc)
{
this.sokWatch = soc;
}
/// <summary>
/// 发送消息
/// </summary>
/// <param name="msg"></param>
/// <returns></returns>
public string SendToClient(string msg)
{

try
{
if (sokWatch != null)
{
byte[] buffer = Encoding.UTF8.GetBytes(msg);
sokWatch.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, null, null);
return "1";
}
else
{
return "0";
}
}
catch (Exception)
{
sokWatch.Shutdown(SocketShutdown.Both);
sokWatch.Dispose();
sokWatch.Close();
return "0";
}
}
}
}
        private static byte[] buffer = new byte[1024 * 1024];
private static Socket sokClient = null;


/// <summary>
/// 连接到指定Server
/// </summary>
/// <param name="IP"></param>
/// <param name="Port"></param>
private void StartConnectionServer(string IP, int Port)
{
sokClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sokClient.Connect(new IPEndPoint(IPAddress.Parse(IP), Port));
sokClient.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), sokClient);
}

private void ReceiveMessage(IAsyncResult ar)
{
var socket = ar.AsyncState as Socket;
var length = socket.EndReceive(ar);
var message = Encoding.UTF8.GetString(buffer, 0, length);
//递归
socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), socket);
}

/// <summary>
/// 发送消息
/// </summary>
/// <param name="msg"></param>
private void SendToServer(string msg)
{
if (sokClient != null && !string.IsNullOrEmpty(msg))
{
byte[] buffStr = Encoding.UTF8.GetBytes(msg);
sokClient.BeginSend(buffStr, 0, buffStr.Length, SocketFlags.None, null, null);
}
}




posted @ 2012-01-05 09:11 九五二七 阅读(41) 评论(0) 编辑

2011年9月26日 #

Excal转换成Dataset

摘要: Excal转换成Dataset阅读全文

posted @ 2011-09-26 18:18 九五二七 阅读(11) 评论(0) 编辑

2011年9月20日 #

SqlServer行转列。

摘要: SqlServer行转列阅读全文

posted @ 2011-09-20 13:33 九五二七 阅读(23) 评论(0) 编辑

2011年9月16日 #

Repeater运用Jquery全选和删除

摘要: Repeater运用Jquery全选和删除阅读全文

posted @ 2011-09-16 16:56 九五二七 阅读(115) 评论(0) 编辑

2011年9月7日 #

C#版24点算法。

摘要: 24点算法 C#版阅读全文

posted @ 2011-09-07 15:51 九五二七 阅读(101) 评论(0) 编辑

2011年9月2日 #

asp.net读取XML文件

摘要: asp.net读取XML文件阅读全文

posted @ 2011-09-02 10:16 九五二七 阅读(134) 评论(0) 编辑

2011年9月1日 #

C#窗体的重要属性(初学者)

摘要: 1.窗体与控件l窗体的重要属性属性说明Name窗体对象的名字,用于在代码中进行标示BackColor窗体的背景色BackgroundImage窗体的背景图像FormBorderStyle窗体的边框样式,有7个可选的值,默认是SizableMaximizeBox确定窗体标题栏的右上角是否有最大化ShowInTaskbar确定窗体是否出现在Windows任务栏中StartPosition确定窗体第一次出现的位置Text窗体标题栏中显示的文本TopMost只是窗体是否始终显示在此属性为TRUE的所有窗体之上,默认为FalseWindowState确定窗体的初始化状态,包括Normal(普通),Max阅读全文

posted @ 2011-09-01 10:20 九五二七 阅读(230) 评论(0) 编辑

BS和CS结构程序(2)

摘要: 关于C/S一)C/S构架的对于用户的好处:1)技术成熟可靠,这是许多知名ERP系统几乎都采用C/S结构根本原因。2)功能强大、操作方便,易用性好,用户会比较喜欢使用,如具有支持键盘快捷键操作等很多用户喜欢的功能,这是B/S远远比不上的。3)远程办公时响应速度快,安全性和稳定性都比B/S要可靠,这是因为一般C/S比B/S减少了一个中间层,因此数据传输环节比B/S要简单,并且由于使用了专门开发的客户端程序,因此比B/S结构具有更高的安全性和稳定性,比如微软的MCSE、印度NIIT的远程考试系统都是基于CS结构,MSN、QQ等优秀软件均采用C/S结构,这也是很多ERP厂商最终选择C/S的原因,因为安阅读全文

posted @ 2011-09-01 10:17 九五二七 阅读(92) 评论(0) 编辑

BS和CS结构程序(1)

摘要: C/S结构B/S结构硬件环境不同:一般建立在专用的网络上,小范围里的网络环境,局域网之间再通过专门服务器提供连接和数据交换服务.建立在广域网之上的,不必是专门的网络硬件环境,例与电话上网,租用设备.信息自己管理.有比C/S更强的适应范围,一般只要有操作系统和浏览器就行对安全要求不同一般面向相对固定的用户群,对信息安全的控制能力很强.一般高度机密的信息系统采用C/S结构适宜.可以通过B/S发布部分可公开信息.建立在广域网之上,对安全的控制能力相对弱,面向是不可知的用户群.对程序架构不同程序可以更加注重流程,可以对权限多层次校验,对系统运行速度可以较少考虑.对安全以及访问速度的多重的考虑,建立在需阅读全文

posted @ 2011-09-01 10:13 九五二七 阅读(38) 评论(0) 编辑

2011年8月31日 #

一个简单的网站测试工具

摘要: 在工作过程中经常需要测试某一个网站是否运行正常,一下是我做的一个小程序。可以实现此功能。这个是刚开始运行的页面截图,开始搞之!需要定义的全局变量 protected string RepeaterURL; protected string RepeatText;//得到返回的XML内容 protected string StartTime;//开始测试的时间 protected string ENDTime;//结束测试的时间 protected DataSet ds; protected string CheckUrlId;//被选中的URL的ID ...阅读全文

posted @ 2011-08-31 11:01 九五二七 阅读(18) 评论(0) 编辑

仅列出标题  下一页