`
yzd
  • 浏览: 1813175 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

最基本的Socket编程C#

 
阅读更多
<div class="postcontent">
<div>
<span>示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息;这里只是一个简单的示例,是一个最基本的</span><span>socket</span><span>编程流程,在接下来的文章中,会依次记录套接字的同步和异步,以及它们的区别。</span>
</div>
<p></p>
<p><span>下面是示例程序的简单步骤说明</span></p>
<p><span>服务器端:</span></p>
<p><span>第一步:用指定的端口号和服务器的</span><span>ip</span><span>建立一个</span><span>EndPoint</span><span>对像;</span></p>
<p><span>第二步:建立一个</span><span>Socket</span><span>对像;</span></p>
<p><span>第三步:用</span><span>socket</span><span>对像的</span><span>Bind()</span><span>方法绑定</span><span>EndPoint</span><span>;</span></p>
<p><span>第四步:用</span><span>socket</span><span>对像的</span><span>Listen()</span><span>方法开始监听;</span></p>
<p><span>第五步:接受到客户端的连接,用</span><span>socket</span><span>对像的</span><span>Accept()</span><span>方法创建新的</span><span>socket</span><span>对像用于和请求的客户端进行通信</span><span>;</span></p>
<p><span>第六步:通信结束后一定记得关闭</span><span>socket;<br></span></p>
<div>
<span><br>代码:<br><br></span>using System;<br>using System.Collections.Generic;<br>using System.Text;<br>using System.Net;<br>using System.Net.Sockets;</div>
<div>namespace server<br>{<br> class Program<br> {<br> static void Main(string[] args)<br> {<br> int port = 2000;<br> string host = "127.0.0.1";</div>
<div>
<br> /**////创建终结点(EndPoint)<br> IPAddress ip = IPAddress.Parse(host);//把ip地址字符串转换为IPAddress类型的实例<br> IPEndPoint ipe = new IPEndPoint(ip, port);//用指定的端口和ip初始化IPEndPoint类的新实例</div>
<div>
<br> /**////创建socket并开始监听<br> Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个socket对像,如果用udp协议,则要用SocketType.Dgram类型的套接字<br> s.Bind(ipe);//绑定EndPoint对像(2000端口和ip地址)<br> s.Listen(0);//开始监听<br> Console.WriteLine("等待客户端连接");</div>
<div>
<br> /**////接受到client连接,为此连接建立新的socket,并接受信息<br> Socket temp = s.Accept();//为新建连接创建新的socket<br> Console.WriteLine("建立连接");<br> string recvStr = "";<br> byte[] recvBytes = new byte[1024];<br> int bytes;<br> bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息<br> recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);</div>
<div>
<br> /**////给client端返回信息<br> Console.WriteLine("server get message:{0}", recvStr);//把客户端传来的信息显示出来<br> string sendStr = "ok!Client send message successful!";<br> byte[] bs = Encoding.ASCII.GetBytes(sendStr);<br> temp.Send(bs, bs.Length, 0);//返回信息给客户端<br> temp.Close();<br> s.Close();<br> Console.ReadLine();<br> }<br><br> }<br>}<br><br>server结果:<br><img border="0" src="http://www.cnblogs.com/images/cnblogs_com/sopper/socketServer.jpg" alt=""><br><br>
</div>
<p><span>客户端:</span></p>
<p><span>第一步:用指定的端口号和服务器的</span><span>ip</span><span>建立一个</span><span>EndPoint</span><span>对像;</span></p>
<p><span>第二步:建立一个</span><span>Socket</span><span>对像;</span></p>
<p><span>第三步:用</span><span>socket</span><span>对像的</span><span>Connect()</span><span>方法以上面建立的</span><span>EndPoint</span><span>对像做为参数,向服务器发出连接请求;</span></p>
<p><span>第四步:如果连接成功,就用</span><span>socket</span><span>对像的</span><span>Send()</span><span>方法向服务器发送信息;</span></p>
<p><span>第五步:用</span><span>socket</span><span>对像的</span><span>Receive()</span><span>方法接受服务器发来的信息</span> <span>;</span></p>
<p><span>第六步:通信结束后一定记得关闭</span><span>socket</span><span>;<br></span></p>
<div>
<img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt=""><span>代码:<br></span><span>using System;<br>using System.Collections.Generic;<br>using System.Text;<br>using System.Net;<br>using System.Net.Sockets;</span>
</div>
<div><span>namespace Client<br>{<br> class Program<br> {<br> static void Main(string[] args)<br> {<br> try<br> {<br> int port = 2000;<br> string host = "127.0.0.1";</span></div>
<div><span> /**////创建终结点EndPoint<br> IPAddress ip = IPAddress.Parse(host);<br> //IPAddress ipp = new IPAddress("127.0.0.1");<br> IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndpoint实例</span></div>
<span>
<div>
<br> /**////创建socket并连接到服务器<br> Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建Socket<br> Console.WriteLine("Conneting…");<br> c.Connect(ipe);//连接到服务器</div>
<div>
<br> /**////向服务器发送信息<br> string sendStr = "hello!This is a socket test";<br> byte[] bs = Encoding.ASCII.GetBytes(sendStr);//把字符串编码为字节<br> Console.WriteLine("Send Message");<br> c.Send(bs, bs.Length, 0);//发送信息</div>
<div>
<br> /**////接受从服务器返回的信息<br> string recvStr = "";<br> byte[] recvBytes = new byte[1024];<br> int bytes;<br> bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息<br> recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);<br> Console.WriteLine("client get message:{0}", recvStr);//显示服务器返回信息</div>
<div> /**////一定记着用完socket后要关闭<br> c.Close();</div>
<div> }<br> catch (ArgumentNullException e)<br> {<br> Console.WriteLine("argumentNullException: {0}", e);<br> }<br> catch (SocketException e)<br> {<br> Console.WriteLine("SocketException:{0}", e);<br> }</div>
<div> Console.WriteLine("Press Enter to Exit");<br> }<br> }<br>}<br><img align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="">
</div>
</span><br>Client端结果:<br><img border="0" src="http://www.cnblogs.com/images/cnblogs_com/sopper/socketClient.jpg" alt="">
</div>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics