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