码迷,mamicode.com
首页 > Windows程序 > 详细

C# 客户端服务器开发(一)

时间:2015-05-13 19:25:00      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:

1、流程图

  首先看一下C#中面向连接的套接字(TCP)的编程流程:

  技术分享

 

2、服务器建立连接、收发数据、关闭连接程序段:

  1)建立连接

//创建本地套接字对象,IPV4寻址方式,基于TCP的Stream Socket(流式套接字0)
Socket localSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPHostEntry local = Dns.GetHostByName(Dns.GetHostName());       //HFY::获取本机主机
IPEndPoint iep = new IPEndPoint(local.AddressList[0], 8088);    //HFY::获取本地主机的IP和端口号
localSocket.Bind(iep);      //HFY::将套接字与本地端口绑定

localSocket.Listen(10);                         //HFY::启动监听
Socket clientSocket = localSocket.Accept();     //HFY::等待接受连接,返回一个与客户端通信的新的套接字

  2)收发数据

clientSocket.Send(Encoding.ASCII.GetBytes("server send data"));     //HFY::向客户端发送数据
            
//HFY::定义一1024字节的接收缓冲区,从客户端接受到的数据存如缓冲区中
byte[] buffer = new Byte[1024];
int receivedNum = clientSocket.Receive(buffer);

  3)关闭连接

//HFY::shutdown函数停止回话,保证所有数据已收发完成,再关闭socket连接
localSocket.Shutdown(SocketShutdown.Both);
localSocket.Close();

   这个方法允许socket对象一直等待,直到将内部缓冲区的数据发送完为止。

3、客户端连接到服务器、收发数据、关闭连接:

  1)连接到服务器

//HFY::指定服务器的IP和端口号,调用Connect函数向服务器发起连接,并将自身绑定到系统分配的端点上
IPAddress remoteHost = IPAddress.Parse("10.64.24.77");
IPEndPoint iep = new IPEndPoint(remoteHost,8088);
Socket localSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
localSocket.Connect(iep);

  2)收发数据

  收发数据过程与服务器类似:

localSocket.Send(Encoding.ASCII.GetBytes("client send data"));  //HFY::客户端向服务器发送数据
//HFY::定义一1024字节的接收缓冲区,从服务器接受到的数据存入缓冲区中
byte[] buffer = new Byte[1024];
int receivedNum = localSocket.Receive(buffer);

  3)关闭连接

  关闭连接过程与服务器相同:

localSocket.Shutdown(SocketShutdown.Both);
localSocket.Close();

4、TCP类: 

  为了简化网络编程,.NET对套接字进行了封装,封装了TcpListener类和TcpClient类。TcpListener类用于监听客户端的连接请求,TcpClient类用于提供本地主机和远程主机的连接信息。

4、使用TCP类TcpListener编写服务器: 

  1)创建一个TcpListener对象,与本地IP和端口号绑定,调用start方法在指定的端口监听:

IPAddress localIP = Dns.GetHostAddresses(Dns.GetHostName())[0];     //HFY::获取本地IP
TcpListener tcpListener = new TcpListener(localIP, 8088);           //HFY::创建TcpListener对象
tcpListener.Start();        //HFY::开始监听

  2)在单独的线程中,循环调用AcceptTcpClient方法接受客户端的连接请求,该方法返回TcpClient对象,利用返回的TcpClient对象的GetStream方法得到NetWorkStream对象。再通过NetWorkStream对象获得BinaryReader对象、BinaryWriter对象,为与客户端通讯做准备:

//HFY::创建一个线程,用于循环等待客户端的连接,AcceptClientConnect是自己定义的一个函数
Thread threadAccept = new Thread(AcceptClientConnect);
threadAccept.Start();       //HFY::启动线程

//HFY::线程执行的AcceptClientConnect方法,用于接收客户端的请求
void AcceptClientConnect()
{
        while (true)    //HFY::循环接受
        {
            try
            {
                tcpClient = tcpListener.AcceptTcpClient();      //HFY::获取TcpClient对象
                if (tcpClient != null)
                {
                    networkStream = tcpClient.GetStream();      //HFY::获取NetworkStream对象

                }
            }
            catch
            {
            }

        }
}

 

C# 客户端服务器开发(一)

标签:

原文地址:http://www.cnblogs.com/HanEichy/p/4500791.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!