1-网络通讯案例
在网络上两个程序需要一个双向通信连接实现数据交换,这个连接的一段称为一个socket。
socket包含了网络通信必须的五种信息:
{
- 协议:TCP ————相当于通信的语言,是中文还是英文
- 本地:IP、端口 ————相当于自己的手机号
- 远程:IP、端口 ————相当于对方的手机号
}
可以通过ipconfig、netstat-ano查看IP和端口
创建socket之外的操作:
客户端
1 using System.Net.Sockets; 2 using System.Text; 3 4 namespace Client 5 { 6 internal class Program 7 { 8 static void Main(string[] args) 9 { 10 Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 11 //连 12 clientSocket.Connect("127.0.0.1",8888); 13 //发 14 string SendInfo= Console.ReadLine(); 15 byte[] data=Encoding.UTF8.GetBytes(SendInfo); 16 clientSocket.Send(data); 17 //收 18 byte[] readBuffer = new byte[1024]; 19 pSocket.Receive(readBuffer); 20 string readStr=Encoding.UTF8.GetString(readBuffer); 21 Console.WriteLine("接收服务器发过来的消息"+readStr); 22 //关 23 clientSocket.Close(); 24 } 25 } 26 }
服务器端
1 using System.Net; 2 using System.Net.Sockets; 3 using System.Text; 4 5 namespace Server 6 { 7 internal class Program 8 { 9 static void Main(string[] args) 10 { 11 Socket serverSocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp); 12 //绑IP 13 IPEndPoint iPEndPoint=new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888); 14 serverSocket.Bind(iPEndPoint); 15 //监听 16 serverSocket.Listen(1000); 17 Console.WriteLine("server Successful"); 18 //同意、接纳 19 Socket connetClinet= serverSocket.Accept();//如果客户端connect连接成功之后,这个函数就会返回客户端的这个socket 20 Console.WriteLine("握手成功"+connetClinet); 21 //收 22 byte[] readBuffer=new byte[1024]; 23 connetClinet.Receive(readBuffer); 24 string readStr=Encoding.UTF8.GetString(readBuffer); 25 Console.WriteLine("转换接收到的消息:"+readStr); 26 //发 27 string sendInfo=Console.ReadLine(); 28 byte[] sendData=Encoding.UTF8.GetBytes(sendInfo); 29 connetClinet.Send(sendData); 30 31 //捕捉异常 32 //关 33 serverSocket.Close(); 34 } 35 } 36 }
封装后客户端
1 using System.Net.Sockets; 2 using System.Text; 3 4 namespace Client 5 { 6 internal class Program 7 { 8 static void Main(string[] args) 9 { 10 Socket clientSocket = CreateSocket(); 11 //1连 12 clientSocket.Connect("127.0.0.1",8888); 13 //2发 14 Send(clientSocket); 15 //3收 16 Receive(clientSocket); 17 //4关 18 Close(clientSocket); 19 } 20 21 static Socket CreateSocket() 22 { 23 return new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 24 } 25 static void Send(Socket pSocket) 26 { 27 string SendInfo = Console.ReadLine(); 28 byte[] data = Encoding.UTF8.GetBytes(SendInfo); 29 pSocket.Send(data); 30 } 31 static void Receive(Socket pSocket) 32 { 33 byte[] readBuffer = new byte[1024]; 34 pSocket.Receive(readBuffer); 35 string readStr = Encoding.UTF8.GetString(readBuffer); 36 Console.WriteLine("接收服务器发过来的消息:" + readStr); 37 } 38 static void Close(Socket pSocket) 39 { 40 pSocket.Close(); 41 } 42 } 43 }
封装后服务器端
1 using System.Net; 2 using System.Net.Sockets; 3 using System.Text; 4 5 namespace Server 6 { 7 internal class Program 8 { 9 static void Main(string[] args) 10 { 11 Socket serverSocket= CreateSocket(); 12 //1绑IP 13 //2监听 14 BindAndListen(serverSocket); 15 //3同意、接纳 16 Accept(serverSocket); 17 //4收 18 Receive(serverSocket); 19 //5发 20 Send(serverSocket); 21 //捕捉异常 22 //关 23 Close(serverSocket); 24 } 25 static Socket CreateSocket() 26 { 27 return new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 28 } 29 static void BindAndListen(Socket pSocket) 30 { 31 IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888); 32 pSocket.Bind(iPEndPoint); 33 pSocket.Listen(1000); 34 Console.WriteLine("server Successful"); 35 } 36 static Socket Accept(Socket pSocket) 37 { 38 Socket connetClinet= pSocket.Accept();//如果客户端connect连接成功之后,这个函数就会返回客户端的这个socket 39 Console.WriteLine("握手成功:" + connetClinet); 40 return connetClinet; 41 } 42 static void Receive(Socket pSocket) 43 { 44 byte[] readBuffer = new byte[1024]; 45 pSocket.Receive(readBuffer); 46 string readStr = Encoding.UTF8.GetString(readBuffer); 47 Console.WriteLine("转换接收到的消息:" + readStr); 48 } 49 static void Send(Socket pSocket) 50 { 51 string sendInfo = Console.ReadLine(); 52 byte[] sendData = Encoding.UTF8.GetBytes(sendInfo); 53 pSocket.Send(sendData); 54 } 55 static void Close(Socket pSocket) 56 { 57 pSocket.Close(); 58 } 59 } 60 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律