简单的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 }
简单的服务器和客户端的通信就算完成了
左边是服务端,右边是客户端