播客 > 玩代码  >  c# socket client 端的使用[同步篇]  | 登录  | RSS订阅地址  | Code平台

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

  一直想深入研究一下在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对象
Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建Socket
c.ReceiveTimeout= 10*1000;//设置超时时间
c.Connect(ipe);//连接到服务器


3.发送请求

string gStr = "GET / HTTP/1.1\r\nHost: "+whost+"\r\nConnection: Close\r\n\r\n";

byte[] bs = Encoding.ASCII.GetBytes(gStr);//把字符串编码为字节
Console.WriteLine("Send Message");
c.Send(bs, bs.Length, 0);//发送信息


4.SOCKET同步接受数据
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());//显示服务器返回数据


5.关闭连接
c.Close();


关于其中的异常处理,请自行搞定。其中有几个问题需要注意:

1:数据量大的话就可能造成线程堵塞,必须使用异步。同步时建议Sleep,但不保证不丢包。莫名其妙。
2:C#获取页面信息建议使用.NET已经现有的System.Net.WebRequest这个,效率比较高。

天气:大雨,ccdot发表于2008-8-21 15:07:45,阅读了608次,共有个0回复.

暂无评论

  1. 想要转载我文章的人滚远远的,能想多远,就滚多远。
  2. 不要提交任何带有网址URL信息的评论.
  3. 需要更多信息?请使用站内搜索,郁闷了?听听我在听什么吧!
用户名:*验证:看不清楚请点击刷新验证码*
内容: