日期:2014-05-18  浏览次数:20890 次

C#网络应用|理解Scoket协议 |新手教程

///自己看书总结的,希望对刚接触者有所帮助。

///套接字(Scoket)是在TCP/IP协议之上的网络通信协议。
///套接字可以看做是通信主机之间的端点,构成了单个主机内及整个网络间的编程界面。
///套接字存在于通信域(通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念)中。
///同一域中,不同的套接字是可以互相通信的。
///套接字分为两种类型:同步套接字和异步套接字。

下面让我们一起来了解它吧:

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;


namespace 理解Scoket协议
{
    class 同步套接字
    {
        static void Main(string[] args)
        {
            ///使用同步套接字技术实现网络通信有5个方面:主机解析、主机绑定、端口监听、数据接收和数据发送
        }
        public void 定义主机对象()
        {
            //①定义主机对象(有两种方法)
            //第一种使用IPEndPoint方法定义主机对象
            IPEndPoint myServer1 = new IPEndPoint(12345, 80);
            //第二种使用IPAddress类,其作用是把字符串转换为IP地址的格式
            IPAddress myIP = IPAddress.Parse("127.0.0.1");
            IPEndPoint myServer2 = new IPEndPoint(myIP, 8080);
        }
        public void 主机解析()
        {
            //②主机解析(在绑定主机之前,要先使用DNS服务器解析主机)
            //下面的代码是使用Dns类的GetHostEntry()方法解析远程的google主机
            IPHostEntry myHost = new IPHostEntry();
            myHost = Dns.GetHostEntry("www.google.com");
            //然后使用IPHostEntry对象的AddressList()方法,可以获得与主机关联的IP地址列表,获取IP地址列表的代码如下:
            for (int i = 0; i < myHost.AddressList.Length; i++)
            {
                myHost.AddressList[i].ToString();
            }
            //使用IPHostEntry对象的HostName()方法还可以获取主机的DNS名称
        }
        public void 端口绑定和监听()
        { 
            //③端口绑定和监听都使用Socket类,其方法Bind()表示绑定通信主机,方法Listen()表示监听。
            //下面的代码是使用Dns类的GetHostEntry()方法解析远程的google主机
            IPAddress myIP = IPAddress.Parse("127.0.0.1");
            IPEndPoint myServer = new IPEndPoint(myIP, 8080);
            //创建Socket对象
            Socket socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            //绑定主机
            socket.Bind(myServer);
            //侦听
            socket.Listen(123);
        }
        public void 数据发送()
        { 
            //④在绑定主机端口和监听之后,必须要使用Socket类的Accept()方法,接收客户端的连接请求;
            //这样,客户端和服务器端就建立了连接,数据发送使用Socket类的Send()方法。代码如下:
            IPAddress myIP = IPAddress.Parse("127.0.0.1");
            IPEndPoint myServer = new IPEndPoint(myIP, 8080);
            //创建Socket对象
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tc