1、Socket通信
【TCP】
服务器端:无目标插座升级为有目标插座后,就可以通过有目标的插座收发数据
客户端:
实战:此案例有利于理解Socket的工作流程。
缺点:服务器只能接收1个客户端的连接,因为只写了一个Accept;服务器与客户端都只能收、发一次
1、创建控制台程序SocketTcpServer,注意引用using System.Net; using System.Net.Sockets;
//1、创建socket Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//地址族、套接字类型、协议 //2、绑定本地ip和端口号(一个网卡就有一个ip,电脑可能有多个ip) IPAddress ipAddress = IPAddress.Parse("192.168.3.3");//ip EndPoint point=new IPEndPoint(ipAddress,2000);//指定ip和端口号 tcpServer.Bind(point); //3、开始监听 tcpServer.Listen(10);//最大连接数 Socket clientSocket= tcpServer.Accept();//暂停当前线程,直到有客户端连接之后,才进行之后的代码 Console.WriteLine("一个客户端连接过来了"); //4、收发数据(使用有目标的插座) //发数据 string message = "你好,我是服务器"; byte[] data= Encoding.UTF8.GetBytes(message);//字符串转成字节数组 clientSocket.Send(data); //发送的是字节数组 Console.WriteLine("向客户端发送了一条数据"); //收数据 byte[] data2 = new byte[1024];//收信息需开辟内存 int length=clientSocket.Receive(data2);//接收的是字节数组 string message2 = Encoding.UTF8.GetString(data2, 0, length);//字节转字符串,展示的是字符串 Console.WriteLine("接收到了客户端发送过来的消息:" + message2); Console.ReadKey();//防止一闪就退出
2、创建控制台程序SocketTcpClient,注意引用using System.Net; using System.Net.Sockets;
//1、创建socket Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //2、连接远程的IP和端口号 IPAddress ipAddress = IPAddress.Parse("192.168.3.3");//字符串转IP EndPoint point = new IPEndPoint(ipAddress, 2000); tcpClient.Connect(point); //3、收发数据(使用有目标的插座) //收数据 byte[] data=new byte[1024];//收信息需开辟内存 int length= tcpClient.Receive(data);//data数组接收数据,返回已接收的字节数 string message = Encoding.UTF8.GetString(data, 0, length);//转字符串,只转化接收到的数据,剩余的空字节没必要转化 Console.WriteLine("接收数据:"+message); //发数据 Console.WriteLine("发送数据:"); string message2 = Console.ReadLine(); tcpClient.Send(Encoding.UTF8.GetBytes(message2));//发送的是字节数组 Console.ReadKey();//防止一闪就退出
3、先启动服务器,再启动客户端。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2018-09-19 JDBC查询MySQL中的表
2018-09-19 JDBC连接MySQL
2018-09-19 IntelliJ IDEA载入JDBC驱动包