c# socket client 端的使用[同步篇]

老农博客 发布于2008-08-21 15:07 | 67次阅读 | 字体: 打印预览


一直想深入研究一下在c#中的Socket编程,苦于没有时间深入做了解,大体对其搞了一番。SOCKET差不多是C#中的比较底层的东西了,其开发和功能使用都是比较复杂的。 主要有两个模型,一个是服务器端的,一个是客户端的,我这里不详细说服务器端的,只说客户端的。所谓的服务器端就是服务器接受的请求并处理,可以把任何HTTP的跑web程序服务器看作是一个端口80的Server(本来就是这样的)。 Client层的编程就比较少被谈及了,因为如是底层的东西对于web程序员大部分时间来说,不怎么接触到,及时作SOAP的研究,也是在SOCKET之上的编程,C#实现SOCKET这里主要有三个步骤: 1:建立IPEndPoint节点 2: 创建一个Socket对象 3:发送请求 4:接受数据(同步篇,本文只说同步接受,异步接受请看下文) 5:数据接受完毕,关闭连接 每个步骤的来说吧: 1:建立IPEndPoint节点 建立IPAddress对象与端口,创建IPEndPoint节点: int port = 80; string whost = "www.5do8.com"; IPHostEntry iphostinfo = Dns.GetHostEntry(whost); IPAddress ip = iphostinfo.AddressList[0]; IPEndPoint ipe = new IPEndPoint(ip, port); 2:创建一个Socket对象 [CODE]Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建Socket c.ReceiveTimeout= 10*1000;//设置超时时间 c.Connect(ipe);//连接到服务器 [/CODE] 3.发送请求 [CODE]string gStr = "GET / HTTP/1.1 Host: "+whost+" Connection: Close "; byte[] bs = Encoding.ASCII.GetBytes(gStr);//把字符串编码为字节 Console.WriteLine("Send Message"); c.Send(bs, bs.Length, 0);//发送信息 [/CODE] 4.SOCKET同步接受数据 [CODE]byte[] RecvBuffer = new byte[1024]; int nBytes, nTotalBytes = 0; StringBuilder sb = new StringBuilder(); System.Text.Encoding myE=Encoding.UTF8; while((nBytes = c.Receive(RecvBuffer, 0, 1024, SocketFlags.None)) > 0){ nTotalBytes += nBytes; sb.Append(myE.GetString(RecvBuffer, 0, nBytes)); } Console.WriteLine("获取信息:{0}", sb.ToString());//显示服务器返回数据 [/CODE] 5.关闭连接 [CODE]c.Close(); [/CODE] 关于其中的异常处理,请自行搞定。其中有几个问题需要注意: 1:数据量大的话就可能造成线程堵塞,必须使用异步。同步时建议Sleep,但不保证不丢包。莫名其妙。 2:C#获取页面信息建议使用.NET已经现有的System.Net.WebRequest这个,效率比较高。

本文出处 : http://www.5do8.com/blog/doc/642/index.aspx end

上一篇:枪毙搜狗爬虫,找工作

下一篇:梦 象棋