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

  • 相关阅读:
    ArcPad 10 的安装部署
    各种机械键盘轴的差别,究竟什么轴好
    default argument given of parameter 的问题
    Quartz中时间表达式的设置-----corn表达式
    图像切割之(一)概述
    SMTP协议分析
    Android学习小Demo(19)利用Loader来实时接收短信
    qml动画控制器AnimationController
    httpclient 文件上传
    Java习题10.24
  • 原文地址:https://www.cnblogs.com/xixixing/p/11553034.html
Copyright © 2020-2023  润新知