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、先启动服务器,再启动客户端。

posted @   夕西行  阅读(336)  评论(0编辑  收藏  举报
编辑推荐:
· 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驱动包
点击右上角即可分享
微信分享提示