服务端与客户端交互(一)

首先我们需要用到的是tcp传输协议。

服务端地址为本地地址,这里说明一下“127.0.0.1”为所有本机电脑的本地地址。

服务端创建流程

先引入命名空间 

using System.Net.Sockets;

using System.Net;

1.创建服务端套接字

new Socket()  构造函数参数(IP地址类型(ipv4指xxx.xxx.xxx.xxx),套接字类型(Stream流TCP,报文UDP),协议类型)。

2.创建ip地址,ip端口号

IPAddress

127.0.0.1永远代表本机ip地址

IPEndPoint

3.绑定服务器与ip端口号

4.开启监听用函数listen();

5.收发数据,用函数send()和recv(),或者read()和write(); 

 class Program
    {
        static void Main(string[] args)
        {
            //1.创建服务端套接字
            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //2.创建服务端ip地址与端口号
            IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
            IPEndPoint ipEndPoint = new IPEndPoint(ipAddress,666);
            //3.服务端与ip地址端口号绑定
            serverSocket.Bind(ipEndPoint);
            serverSocket.Listen(50);//开始监听端口号,处理链接的队列
            Socket clientSocket =serverSocket.Accept();//接收一个客户端链接
            //向客户端发送消息
            string str = "Hello !客户端。。。";
            byte[] data = System.Text.Encoding.UTF8.GetBytes(str);
            clientSocket.Send(data);
            //接收客户端发送的消息
            byte[] dataBuffer = new byte[1024];
            int count =clientSocket.Receive(dataBuffer);//接收到的消息存储进数组缓存区,返回存储的长度。
            string msgReceive = Encoding.UTF8.GetString(dataBuffer, 0, count); //字节数组转为消息,需指定长度

            Console.WriteLine(msgReceive);
            Console.ReadKey();
            serverSocket.Close();
        }
    }

客户端代码与服务端代码基本一致 

创建套接字后建立与远程主机的链接

  class Program
    {
        static void Main(string[] args)
        {
            Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            clientSocket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 666));

            //接收从服务器发送过来的消息
            byte[] data = new byte[1024];
            int count = clientSocket.Receive(data);
            string strReceive = Encoding.UTF8.GetString(data,0,count);
            Console.WriteLine(strReceive);

            //向服务器发送消息
            string strSend = Console.ReadLine();

            byte[] dataSend = Encoding.UTF8.GetBytes(strSend);
            clientSocket.Send(dataSend);
        }
    }

一般情况下我们的服务端代码需运行在服务器上,ip地址取网络地址而不是局域网地址。

TCP与UDP传输协议总结

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保   证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
  UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

另:开发过程中中文补全提示。.net4.5开发时函数提示不现实中文方法

找到:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\zh-Hans的目录,全部复制,然后覆盖掉C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\zh-Hans就行了

你可能感兴趣的:(编程指南,tcp,服务端与客户端交互)