简单的Socket通信

Socket简介

Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

服务端步骤:

• socket:创建服务器socket实例
• bind:绑定ip地址和端⼝
• listen:开始监听
• accept:接收客户端请求
• read:读取客户端传来的数据
• write:给客户端传数据
• close:关闭socket,结束通信

客户端步骤:

• socket:创建客户端socket实例
• connect:连接服务器
• read:读取客户端传来的数据
• write:给客户端传数据
• close:关闭socket,结束通信

 

这里我们实现一个同步方法的Socket通信

 

Socket实例

对于初学者来说,Socket可能很难理解,所以这里我们举一个简单的例子来模拟Socket通信的过程

 

首先,新建一个C#工程,引入我们需要的类库

1 using System;
2 using System.Net;                     //网络库
3 using System.Net.Sockets;           //网络中的socket库
4 using System.Text;                   //文本处理库
5 using System.Threading;             //多线程

那么,故事开始了,我新开了一家餐厅,餐厅有客户部用来接听客户的电话

 //初始化服务器.
        static void IniteServer()
        {
            //生产一个新的Socket作为server
            Socket server = new Socket(AddressFamily.InterNetwork,          //局域网.
                                                 SocketType.Stream,         //流Socket.
                                                 ProtocolType.Tcp);         //协议.

            //定义一个终端.  IP地址相当去我们要注册的电话号码,客户打这个电话就可以联系到餐厅.
            //后面的是端口号,其实就相当于是我们客户部的分机号码啦.
            IPEndPoint _endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2345);

            //绑定终端.
            server.Bind(_endPoint);

            //监听.   开始接收客户的电话.
            server.Listen(10);
            Console.WriteLine("Server is OK! Waiting for connected");

            //重复接收客户端连接.       我们需要同时接听很多客户的电话对吧~
            while (true)
            {
                //阻塞方法,线程休眠1.5s
                Thread.Sleep(1500);

                //服务器上生成一个客户端来处理客户端的信息,         也就是如果有客户打电话过来,就找一个接线员来为这个客户服务.
                Socket client = server.Accept();
                Console.WriteLine ("Someone connected: " + client.LocalEndPoint.ToString());

                //重复接收客户端的信息.
                while (true) {
                    Thread.Sleep(50);

                    //接收信息的长度1kb
                    byte[] buffer = new byte[1024];

                    //接收的实际长度.
                    int lenght = client.Receive(buffer);

                    //将接收到的二进制信息转换成字符串.
                    string msg = Encoding.Default.GetString(buffer, 0, lenght);
                    Console.WriteLine ("client: " + msg);
                }
            }
        }

        public static void Main(string[] args)
        {
            //开启新线程来初始化服务器.
            Thread newServer = new Thread(IniteServer);

            //开启线程.
            newServer.Start();
        }

服务端的代码大致上就算完成了,下面是客户端的,总体上差不多。。

 1         public static void Main(string[] args)
 2         {
 3             Thread newClient = new Thread(() => {
 4                 Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 5                 IPEndPoint _endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2345);
 6 
 7                 //连接终端
 8                 client.Connect(_endPoint);
 9 
10                 while (true) {
11 
12                     Thread.Sleep(50);
13                     Console.WriteLine ("Please write a message:");
14 
15                     //阻塞方法,读取用户输入的信息.
16                     string msg = Console.ReadLine();
17 
18                     //将信息转换为二进制,并发送信息.
19                     byte[] buffer = Encoding.Default.GetBytes(msg);
20                     client.Send(buffer);
21 
22                 }
23             });
24 
25             newClient.Start();
26         }

 

 

简单的服务器和客户端的通信就算完成了

左边是服务端,右边是客户端

 

posted @ 2015-10-07 16:40  狭隘龙  阅读(305)  评论(0编辑  收藏  举报