2008年9月5日
摘要: IPAddress ip1 = GetServerIp(); IPEndPoint iep = new IPEndPoint(ip1, 8000); socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Bind(iep); byte[] byteMessage=new byte[1000]; while (true) { try { socket.Listen(5); Socket clientSocket = socket.Accept(); clientSocket.Receive(byteMessage 阅读全文
posted @ 2008-09-05 22:43 小顾问 阅读(414) 评论(0) 推荐(0) 编辑
摘要: private Thread threadRead; //创建线程,用以侦听端口号,接受信息 private TcpListener tcpListen;//侦听端口号 private bool blistener = true; private NetworkStream stream; private StreamReader read; private TcpClient client; private delegate void listbox_show(string str); listbox_show listboxshow; public Tcpserver() { InitializeComponent(); listboxshow = new listbox_show(show); } 阅读全文
posted @ 2008-09-05 22:28 小顾问 阅读(448) 评论(0) 推荐(0) 编辑
摘要: //提供网际协议(IP)地址IPAddress IPAddress HostIP = IPAddress.Parse("127.0.0.1"); //将网络端点表示为IP地址和端口号 IPEndPoint point; //定义两个套接字 Socket socket; Socket acceptedSocket; //开启接受套接字的服务 private void button1_Click(object sender, EventArgs e) { try { point = new IPEndPoint(HostIP, Int32.Parse("1571")); socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, Prot 阅读全文
posted @ 2008-09-05 22:11 小顾问 阅读(567) 评论(0) 推荐(0) 编辑
  2008年9月4日
摘要: 同步方法调用在程序继续执行之前需要等待同步方法执行完毕返回结果 异步方法则在被调用之后立即返回以便程序在被调用方法完成其任务的同时执行其它操作 .NET框架基类库中有好几种类都可以提供同步和异步的方法调用。 因为同步方法调用会导致程序流程中途等待,所以采用同步方法的情况下往往会导致程序执行的延迟 相比来说,在某些条件下选择异步方法调用就可能更好一些 例如,有的时候程序需要给多个Web服务发出请求,还有远程处理信道(HTTP、TCP)和代理,这时就最好采用异步方法 .NET Framework允许异步调用任何方法,定义与需要调用的方法具有相同签名的委托 CLR将自动为该委托定义添加适当签名的BeginInvoke虚方法和EndInvoke虚方法和Invoke方法。 阅读全文
posted @ 2008-09-04 22:01 小顾问 阅读(5457) 评论(3) 推荐(1) 编辑
摘要: 在这篇文章中,我们知道了为什么在我们的服务器应用中需要使用线程池来优化资源和CPU的利用。我们学习了一个线程池是如何实现的,需要考虑多个因素如:CPU使用的百分比,队列请求或者系统的处理器数量。 .NET提供了丰富的线程池的功能以让我们的应用程序使用, 并且与.NET框架的类紧密地集成在一起。这个线程池是高度优化了的,它只需要最少的CPU时间和资源,而且总能适应目标平台。 因为与框架集成在一起,所以框架中的大部分类都提供了使用线程池的内在功能,给开发人员提供了集中管理和监视应用中的线程池的功能。鼓励第三方组件使用线程池,这样它们的客户就可以享受.NET所提供的全部功能。允许执行用户函数,定时器,I/O操作和同步对象。 假如你在开发服务器应用系统,只要有可能就在你的请求处理系统中使用线程池。或者你开发了一个让服务器程序使用的库,那么尽可能提供系统线程池的异步对象处理。 阅读全文
posted @ 2008-09-04 18:23 小顾问 阅读(1724) 评论(1) 推荐(0) 编辑
  2008年8月27日
摘要: System.Web.HttpException: 无法连接到 SQL Server 数据库。 ---> System.Data.SqlClient.SqlException: 在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)。。。。。。 ” 解决办法: 在aspnet_regsql第三步时,将“服务器名称 后加上 /SQLEXPRESS 就好了,填入数据库名称(以创建好的)直接下一步。 阅读全文
posted @ 2008-08-27 19:59 小顾问 阅读(626) 评论(0) 推荐(0) 编辑
  2008年8月14日
摘要: 如果你正在负责一个基于SQL Server的项目,或者你刚刚接触SQL Server,你都有可能要面临一些数据库性能的问题,这篇文章会为你提供一些有用的指导(其中大多数也可以用于其它的DBMS)。 在这里,我不打算介绍使用SQL Server的窍门,也不能提供一个包治百病的方案,我所做的是总结一些经验----关于如何形成一个好的设计。这些经验来自我过去几年中经受的教训,一直来,我看到许多同样的设计错误被一次又一次的重复。 阅读全文
posted @ 2008-08-14 16:37 小顾问 阅读(865) 评论(4) 推荐(0) 编辑
  2008年8月1日
摘要: 以运行库为目标的代码称为托管代码 C++分成两种,一种是托管C++,另外一种是非托管C++ C#是以运行库为目标设计的,因此用C#编写的代码基本上为托管代码 不以运行库为目标的代码称为非托管代码 .NET提供了与非托管代码互操作的服务,比如与COM互操作的Interop服务 .NET平台在内存管理方面提供了GC(Garbage Collection),负责自动释放托管资源和内存回收的工作,但它无 法对非托管资源进行释放,这时我们必须自己提供方法来释放对象内分配的非托管资源,比如你在对象的实现代 码中使用了一个COM对象。 阅读全文
posted @ 2008-08-01 18:21 小顾问 阅读(500) 评论(1) 推荐(0) 编辑
摘要: 2. C#提供一个的关键字stackalloc用于申请堆栈内存。注意,这个申请内存分配的是栈内存,当函数执行完毕后,内存会被自动回收。不过我想用这个栈内存基本可以解决40%的问题,而且使用的时候不必担心内存泄漏问题。 3. .net 好像不直接支持堆内存的申请(这个对.net来说很危险),不过我们可以通过调用win32 api 的方法进行申请。这样就可以解决剩下40%的问题。堆内存申请的方法在MSDN里面有相关的文档。 4. 结构体是一个特殊的对象。他与类的定义就差一个关键字,使用方法也和类一样,可以定义属性,可以定义方法。但是在进行指针操作的时候双方就有很大的差别了。结构体可以通过sizeof()取得大小,大小与结构体里有多少实体变量有关,但是如果struck里定义了类的对象,或者指针,sizeof可能会编译不过(void* 的空指针例外,不过需要在结构体声明处加上unsafe)。 5. fixed关键字:fixed()会告诉垃圾收集器,类实例的某些成员有指向他们的指针,所以这些实例不能移动目前了解的不多,不过有一个很实用的例子可以让指针能够和.net里的数组进行交互操作: 阅读全文
posted @ 2008-08-01 16:40 小顾问 阅读(23637) 评论(3) 推荐(0) 编辑
  2008年7月29日
摘要: 委托和事件的区别是:委托与类,结构,接口,枚举是一类, 而事件属类成员,和属性,方法,字段是一类。 如果你的委托定义在类里面,那么这个委托的作用域为整个类,不是整个命名空间,在另外的类里是不能应用这个委托的,如若你的委托定义在类体之外,那么这个委托的作用域为整个命名空间,在各个类之间是可以共享的 阅读全文
posted @ 2008-07-29 21:05 小顾问 阅读(832) 评论(3) 推荐(0) 编辑