首页 > 其他分享 >NETCORE - Socket 通信

NETCORE - Socket 通信

时间:2022-10-24 23:36:34浏览次数:55  
标签:Socket NETCORE System 通信 client new using

NETCORE - Socket 通信

创建两个.net项目,一个做为服务端,一个做为客户端。

项目1:

  NETCORE.SSocket.Server  (.net6 控制台应用程序)

创建 socket 服务类: SocketServer.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace NETCORE.SSocket.Server
{
    internal class SocketServer
    {
        static Socket tcpServer;

        public static void Init()
        {
            tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建socket对象
            //tcpServer.Bind(new IPEndPoint(IPAddress.Parse("172.21.0.16"),18200));
            tcpServer.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 18200));
            tcpServer.Listen(100);
            //Thread serverThread = new Thread(serverRead);

            Console.WriteLine("服务器已启动,等待连接.......");

            while (true)
            {
                Socket clientSocket = tcpServer.Accept();
                var epoint = (clientSocket.RemoteEndPoint as IPEndPoint);
                Console.WriteLine(epoint.Address + ":" + epoint.Port + "已连接");
                //serverThread.Start();
                Task.Run(() => serverRead(clientSocket));

                //_Client = new Client(clientSocket);
            }
        }
        private static void serverRead(Socket clientSocket)
        {
            string recvStr = "";
            byte[] recvBytes = new byte[1024];
            int bytes;
            do
            {
                bytes = clientSocket.Receive(recvBytes, recvBytes.Length, 0); //从客户端接受消息
                recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
            } while (bytes == 1024);
            Console.WriteLine("{0} 收到:{1}", clientSocket.RemoteEndPoint.ToString(), recvStr);
        }
    }
}

 

在 Program.cs 文件中引入

// See https://aka.ms/new-console-template for more information
using NETCORE.SSocket.Server;

Console.WriteLine("Hello, World!");

SocketServer.Init();

 

 

项目2:

  NETCORE.SSocket.Client (.net6 控制台应用程序)

创建 socket 客户端类: SocketClient.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace NETCORE.SSocket.Client
{
    internal class SocketClient
    {
        public static void Init()
        {

            TcpClient client = new TcpClient();

            client.Client.Connect(IPAddress.Parse("127.0.0.1"), 18200);

            //Task.Run(() => ReadData(client)); 

            Task.Run(() => ReadDataLoop(client));

            client.Client.Send(Encoding.ASCII.GetBytes("{\"TID\":1111,\"blabla\":{}}"));
        }

        private static void ReadDataLoop(TcpClient client)
        {
            while (true)
            {
                if (!client.Connected)
                    break;
                string xxx = "";
                xxx = ReadData(client);
                Console.WriteLine(xxx);
            }
        }

        private static string ReadData(TcpClient client)
        {
            string retVal;
            byte[] data = new byte[1024];
            NetworkStream stream = client.GetStream();
            byte[] myReadBuffer = new byte[1024];
            StringBuilder myCompleteMessage = new StringBuilder();
            int numberOfBytesRead = 0;
            do
            {
                numberOfBytesRead = stream.Read(myReadBuffer, 0, myReadBuffer.Length);

                myCompleteMessage.AppendFormat("{0}", Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead));

            }
            while (stream.DataAvailable);
            retVal = myCompleteMessage.ToString();
            return retVal;
        }
    }
}

 

 

在 Program.cs 中引入:

// See https://aka.ms/new-console-template for more information
using NETCORE.SSocket.Client;

Console.WriteLine("Hello, World!");

SocketClient.Init();

 

 

先启动 服务项目,再启动客户端项目

 

标签:Socket,NETCORE,System,通信,client,new,using
From: https://www.cnblogs.com/1285026182YUAN/p/16823308.html

相关文章

  • Linux进程间通信(一)
    进程间通信概念:进程是一个独立的资源分配单位,不同进程之间有关联,不能在一个进程中直接访问另一个进程的资源。进程和进程之间的资源是相互独立的,一个进程不能直接访问另......
  • 使用SuperWebSocket 构建实时 Web 应用
    Web应用的信息交互过程通常是客户端通过浏览器发出一个请求,服务器端接收和审核完请求后进行处理并返回结果给客户端,然后客户端浏览器将信息呈现出来,这种机制对于信息变化不......
  • html5中播放rtsp流实现监控、直播等方案(利用Ffmpeg + node.js + websocket + flv.js实
    前提:需要确认你的服务器环境中是否安装了ffmpeg这个工具,因为转码的核心其实就是通过 ffmpeg命令 转码,需要你通过在命令行里输入 ffmpeg 来确认。   安装参考:htt......
  • vue组件通信方式有哪些?
    vue组件通信方式一、props(父向子传值----自定义属性)/$emit(子向父传值-----自定义事件)父组件通过props的方式向子组件传递数据,而通过$emit子组件可以向父组件通信......
  • GatewayWorker websocket 连接 1 分钟后自动断开原因?
    GatewayWorker配置通过nginx转发,客户端定时(每60秒)发送心跳,心跳间隔设置如下://心跳间隔$gateway->pingInterval=30;$gateway->pingNotResponseLimit=6;//心跳数据$g......
  • Java生产者消费者问题-多线程-线程同步-线程安全-线程通信
    packageA_ShangGuiGu.Thread.ThreadTest;/***生产者消费者问题:生产者(Producer)将商品(commodity)交给商店(Shop),消费者(Consumer)进行消费*商店里的商品数量上限为20......
  • wait和notify线程通信
    packageA_ShangGuiGu.Thread.ThreadTest;/***线程通信的实例:两个线程交替打印1-100,一人一次*涉及到的方法:*wait():调用wait()方法会使得调用该方法的线程进入阻塞状态。......
  • socket底层实现
    网络七层由下往上分别为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。其中物理层、数据链路层和网络层通常被称作媒体层,是网络工程师所研究的对象;传输......
  • NETCORE - WebSocket通信
    NETCORE-WebSocket通信 webscoket 通信 一般为 客户端与服务端通信,如需两个服务端通信,可把其中一个服务端模拟成客户端。项目框架 vue+.net6 创建NET6 的......
  • 基于C#的Socket网络编程
    基于C#的Socket网络编程服务端usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSyste......