c#写Socket(一)

刚开始看Socket后期会继续更新,有什么不对的地方,多谢大神评论

Socket是网络连接通信的一种,网上是这么说的:“网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

建立网络通信连接至少要一对端口号(socket)。

socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;

HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

 

Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,客户软件将插头插到不同编号的插座,就可以得到不同的服务。

 

static void Main(string[] args)
        {
            /*
             * ——————————服务器端
             * 1、创建socket
             * 2、绑定ip跟端口号(ip是找到对应的客户端,端口号找到该客户端上的对应的app)
             * 3、开始监听
             * 4、Accept()(等待客户端连接)
             * 5、使用返回的客户端跟客户端通信Send(byte[]);
             */
            //创建socket
            Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //绑定ip和端口号
            //EndPoint是抽象类,IPEndPoint是一个子类,是对ip和端口号的一个封装
            EndPoint point = new IPEndPoint(IPAddress.Parse("192.168.31.50"),7788);
            tcpServer.Bind(point);//向操作系统申请一个可用的ip跟端口号用来做通信
            //开始监听
            tcpServer.Listen(100);//参数为最大连接数量
            Console.WriteLine("开始等待客户端连接。。。");
            Socket clientSocket = tcpServer.Accept();//暂停当前线程,直到有一个客户端连接过来之后才进行下面的处理,(等待客户端连接)
            //上面返回一个Socket类型的对象,用这个返回的Socket对象跟客户端进行通信
            Console.WriteLine("有一个客户端连接到服务器。。。");
            string message = "hello 欢迎接到服务器";
            byte[] data = Encoding.UTF8.GetBytes(message);//对字符串编码,得到一个字符串的字节数组
            //发送数据,参数为byte[]数组
            clientSocket.Send(data);
            Console.ReadKey();
        }

 

static void Main(string[] args)
        {
            /*
             * ---------------客户端
             * 1、创建socket
             * 2、发起连接请求
             * 3、Receive(byte[])接收数据
             * 4、可以把字节数组转成对应的类型
             */

            //创建socket
            Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            //发起连接请求,需要一个EndPoint参数
            //IPAddress.Parse("192.168.31.50")这个方法可以把一个字符床的ip转化成一个ipaddress的对象
            EndPoint point = new IPEndPoint(IPAddress.Parse("192.168.31.50"),7788);
           
            tcpClient.Connect(point);//这里的ip和端口号必须和服务器的一样,,,,通过这个找到服务器
            Console.WriteLine("发起请求");
            //接收连接后,服务器发来的数据,需要一个byte[]数组
            byte[] data = new byte[1024];
            int length = tcpClient.Receive(data);//这里传递一个byte数组,实际上这个数组用来接收数据,
            //返回的int类型数据,表示接收了多少个字节的数据
            Console.WriteLine("接收到数据");
            //第一个参数是接收的数组,第二个参数是从那个位置开始转化,第三个参数是到那个位置停止
            string message = Encoding.UTF8.GetString(data, 0, length);//只转有效的数组长度
            Console.WriteLine("数据为" + message);
            Console.ReadKey();//暂停下程序
        }

 

,现在的服务器只有一个发送功能,客户端只有个接收功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值