服务器客户端构造流程

来源:互联网 发布:java jdbc driver管理 编辑:程序博客网 时间:2024/04/29 13:23

服务器客户端构造流程

一、数据流基本知识

1、网络流

    方法一:

    public NetworkStream(Socket socket)

 

    例如:

    NetworkStream newStream=new NetworkStream(mySock);

 

    方法二:

    public NetworkStream(Socket socket,bool ownsSocket)

 

    例如:

    NetworkStream newStream=new NetworkStream(mySock,true);

 

    方法三:

    public NetworkStream(Socket socket,FileAccess access)

 

    例如:

    NetworkStream newStream=new NetworkStream(mySock,System.IO.FileAccess.Read);

 

    方法四:

    public NetworkStream(Socket socket,FileAccess access, bool ownsSocket)

 

    例如:

    NetworkStream newStream=new NetworkStream(mySock,System.IO.FileAccess.Read,true);

 

    Read方法:

    Public override int Read(int byte[] buffer,int offset,int size)

 

    Flush方法:

Public override void Flush()

 

    Write方法:

    Public override void Write(int byte[] buffer,int offset,int size)

2、文本流

    向文件写文本流:

    例如:

    StreamWriter sw=null;

    sw=new StreamWriter(“e://temp//aa.txt”,false,System.Text.Encoding.UTF8);

    sw.Write(“aaaaaaaaaaaaaaa”);

    sw.Close();

    向网络写文本流:

    例如:

    string str=”aaaaaaaaaaaaaaaa”;

    byte[] myByte=System.Text.Encoding.UTF8.GetBytes(str);

    NetworkStream netStream=new NetworkStream(mySock);

NetStream.Write(myByte,0,myByte.Length);

 

从文件读取文本:

    例如:

    StreamReader sw=null;

    sr=new StreamReader(“e://temp//aa.txt”,System.Text.Encoding.UTF8);

    string myStr=sr.ReadToEnd();

    sr.Close();

 

    从网络读取文本:

    例如:

    string str=”aaaaaaaaaaaaaaaa”;

    byte[] myByte=System.Text.Encoding.UTF8.GetBytes(str);

    NetworkStream netStream=new NetworkStream(mySock);

NetStream.Read(myByte,0,myByte.Length);

3、文件流

    将网络流数据写入文件:

    例如:

    FileStream filestream=new FileStream(path,FileMode.OpenOrCreate,FileAccess.Write);

    int readNumber=0;

    byte[] myByte=new byte[8];

    while((readNumber=stream.Read(myByte,0,8))>0)

    {

        filestream.Write(myByte,0,readNumber);

    filestream.Flush();

    }

filestream.Close();

 

读文件并写入网络流:

    例如:

FileStream filestream=new FileStream(path,FileMode.Open,FileAccess.Read);

    Int number;

byte[] myByte=new byte[8];

NetworkStream netStream=new NetworkStream(mySock);

while((number = filestream.Read(myByte,0,8))!=0)

    {

        netStream.Write(myByte,0,8);

    netStream.Flush();

    myByte=new byte[8];

    }

filestream.Close();

 

二、线程基本知识

1、线程创建

    public Thread(ThreadStart start)

   

    例如:

    Thread thread=new Thread(new ThreadStart(accp));

    Private void accp()

    {

        ……

    }

2、线程启动

    public void Start()

   

    例如:

    Thread thread=new Thread(new ThreadStart(accp));

    Thread.Start();

    Private void accp()

    {

        ……

    }

3、线程暂停与重新启动

    线程休眠:

    Thread.Sleep(TimeOut.Infinite);

   

    线程挂起:

    Thread thread=new Thread(new ThreadStart(accp));

    Thread.Start();

    ……

    thread.Suspend();

 

    线程重新开始:

    Thread thread=new Thread(new ThreadStart(accp));

    Thread.Start();

    ……

    thread.Suspend();

    ……

    thread.Resume();

4、线程销毁

    方法一:

    public void Abort();

 

    方法二:

    public void Abort(object stateInfo);

   

    例如:

    Thread thread=new Thread(new ThreadStart(accp));

    Thread.Start();

    ……

    thread.Abort();

    thread.Join(10000);

 

    方法三:

    public void Interrupt()

 

    例如:

    Thread thread=new Thread(new ThreadStart(accp));

    Thread.Start();

    ……

thread.Join(10000);

    thread. Interrupt ();

       

三、服务器构造流程

1、同步套接字服务器开发过程

(1)主机解析->主机绑定->端口监听->数据接收->数据发送

(2)定义主机对象

(以下为IPEndPoint类的方法)

    方法一:

    public IPEndPoint(IPAddress address,int port)

    例如:

    IPAddress myIP=IPAddress.Parse(“IP地址”);

    IPEndPoint myServer=new IPEndPoint(myIP,myPort);

   

    方法二:

    public IPEndPoint(long address,int port)

    例如:

IPEndPoint myServer=new IPEndPoint(12345,myPort);

(3)主机解析

    (以下为Dns类的方法)

    public static IPHostEntry Resolve(string hostname)

    例如:

    IPHostEntry myHost=new IPHostEntry();

    MyHost=Dns.Resolve(域名);

    ---------------------------------------------------------

    MyHost.AddressList.Length   //获取主机信息数量

---------------------------------------------------------

获取主机信息:

方法一:

    public static IPHostEntry GetHostByName(string hostname)

 

    方法二:

    public static IPHostEntry GetHostByAddress(IPAddress address)

 

    方法三:

public static IPHostEntry GetHostByAddress(string address)

(4)端口绑定与监听

(以下为Socket类的方法)

    端口绑定:

    public void Bind(EndPoint localEP)

 

    端口监听:

    public void Listen(int backlog)

 

    接收客户端的连接请求:

    public Socket Accept()

   

    例如:

    IPAddress myIP=IPAddress.Parse(“127.0.0.1”);

    IPEndPoint myServer=new IPEndPoint(myIP,2020);

    Socket sock=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

    sock.Bind(MyServer);

    sock.Listen(50);

    Socket newsock=sock.Accept();

(5)发送数据

    (发送数据可以用Socket类的Send方法或NetworkStream类的Write方法)

    方法一:

    public int Send(byte[] buffer)

   

    方法二:

    public int Send(byte[], SocketFlags)

 

    方法三:

    public int Send(byte[],int,SocketFlags)

 

    方法四:

    public int Send(byte[],int,int,SocketFlags)

 

    例如:

    (接上面例子)

    Byte[] bytee=new Byte[64];

    string send=”aaaaaaaaaaaa”;

    bytee=System.Text.Encoding.BigEndianUnicode.GetBytes(send.ToCharArray());

    newsock.Send(bytee,bytee.Length,0);

 

    方法五:

    public override void Write(byte[] buffer,int offset,int size)

   

    例如:

    NetworkStream stre=new NetworkStream(newsock);

    Byte[] bytee=new Byte[512];

    string send=”aaaaaaaaaaaa”;

    bytee=System.Text.Encoding.BigEndianUnicode.GetBytes(send);

    stre.Write(bytee,0,bytee.Length);

(6)接收数据

    (接收数据可以用Socket类的Receive方法或NetworkStream类的Read方法)

    方法一:

    public int Receive(byte[] buffer)

   

    方法二:

    public int Receive(byte[], SocketFlags)

 

    方法三:

    public int Receive(byte[],int,SocketFlags)

 

    方法四:

    public int Receive(byte[],int,int,SocketFlags)

   

    例如:

    Byte[] bytee=new Byte[512];

    newsock.Receive(bytee,bytee.Length,0);

    string rece=System.Text.Encoding.BigEndianUnicode.GetString(bytee);

 

    方法五:

    public override void Read(byte[] buffer,int offset,int size)

   

    例如:

    NetworkStream stre=new NetworkStream(newsock);

    Byte[] bytee=new Byte[512];

    stre.Read(bytee,0,bytee.Length);

    string rece=System.Text.Encoding.BigEndianUnicode.GetBytes(bytee);

 

2、异步套接字服务器开发过程

(异步套接字服务器主机的绑定与端口的监听与同步套接字服务器一样)

(1)接收客户端的连接请求

    public IAsyncResult BeginAccept(AsyncCallback callback,object state)

 

(2)发送数据

    public IasyncResult BeginSend(byte[] buffer,int offset,int size,SocketFlags socketFlags,AsyncCallback callback,Object state)

 

(3)接收数据

    public IasyncResult BeginReceive(byte[] buffer,int offset,int size,SocketFlags socketFlags,AsyncCallback callback,Object state)

 

(开发过程比较复杂繁琐,待补充……)

 

3TcpListener服务器开发过程

(1)端口监听

(以下为TcpListener类的方法)

    端口监听:

    public void Start()

 

    接收客户端的连接请求:

    public Socket AcceptSocket()

(TcpListener服务器的发送数据和接收数据与上面两种类型的一样)

 

四、客户端构造流程

1、同步套接字客户端开发过程

(1)建立与服务器的连接->数据发送与接收

(2)建立与服务器的连接

(以下为Socket类的方法)

    public void Connect(EndPoint remoteEP)

 

    例如:

    IPAddress myIP=IPAddress.Parse(IP地址);

    IPEndPoint myServer=new IPEndPoint(myIP,1234);

    Socket sock=new Socket(AddressFamily.Internetwork,SocketType.Stream,ProtocolType.Tcp);

    sock.Connect(myServer);

2、异步套接字客户端开发过程

(1)建立与服务器的连接

(以下为Socket类的方法)

    public IAsyneResult BeginConnect(EndPoint remoteEP,AsyncCallback callback,object state)

(具体使用参照异步套接字服务器开发过程)

 

3TcpListener客户端开发过程

(1)建立连接

(以下为TcpClient类的方法)

    方法一:

    public TcpClient(IPEndPoint localEP)

 

    例如:

    IPAddress myIP=IPAddress.Parse(IP地址);

    IPEndPoint myServer=new IPEndPoint(myIP,12345);

    TcpClient myClient=new TcpClient(myServer);

 

    方法二:

    public TcpClient (string hostname.int port)

   

    例如:

    TcpClient myClient=new TcpClient(www.263.net,”80”);

 

    方法三:

    public void Connect(EndPoint remoteEP)

 

例如:

    TcpClient myClient=new TcpClient();

IPAddress myIP=IPAddress.Parse(IP地址);

    IPEndPoint myServer=new IPEndPoint(myIP,1234);

MyClient.Connect(myServer);

 

    方法三:

    public void Connect(IPAddress address,int port)

 

    例如:

    IPAddress myIP=IPAddress.Parse(IP地址);

    TcpClient myClient=new TcpClient();

    MyClient.Connect(myIP,12345);

 

    方法四:

    public void Connect(string hostname,int port)

 

    例如:

    TcpClient myClient=new TcpClient();

MyClient.Connect(“www.263.net”,12345);

 

(TcpListener客户端的发送数据和接收数据与TcpListener服务器的一样)

原创粉丝点击