利用TCP服务器接收多客户端的音频数据,通过Naudio进行播放及音频处理(一)TCP服务器

建立tcp服务器

1.开启服务

// 创建负责监听的套接字,注意其中的参数;
            Socket Listensocket= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            // 获得文本框中的IP对象;
            IPAddress address = IPAddress.Parse("127.0.0.1");
            // 创建包含ip和端口号的网络节点对象;
            IPEndPoint endPoint = new IPEndPoint(address, int.Parse("8000"));
            // 将负责监听的套接字绑定到唯一的ip和端口上;
            Listensocket.Bind(endPoint);
            // 设置监听队列的长度;
            Listensocket.Listen(200);

            // 创建负责监听的线程;
            Thread threadWatch = new Thread(ListenConnecting);
            //是否为后台线程
            Thread threadWatch.IsBackground = true;
            //线程开始
            Thread threadWatch.Start();

2.监听线程


/// <summary>
        /// 存放申请连接的客户端
        /// </summary>
        public static Socket[] Clientsocket = new Socket[200];

public static void ListenConnecting()
        {
        	// 持续不断的监听客户端的连接请求;
			while (true)  
           {
           		//请求的连接,为阻塞的模式,无请求一直阻塞线程
            	Socket sokConnection = Listensocket.Accept();
            	//存入数组
            	for(int i=0;i<Clientsocket.length;i++){
            		if(Clientsocket[i]==null){
            			Clientsocket[i]=sokConnection;
            			break;
					}
            	}
            	//建立接收数据的线程
            	 Thread thread = new Thread(RecMsg);
                 thread.IsBackground = true;
                 //传入Socket对象
                 thread.Start(sokConnection);
           }
        }

3.接收数据线程

/// <summary>
        /// 接收数据
        /// </summary>
        /// <param name="sokConnectionparn"></param>
 		public static void RecMsg(object sokConnectionparn)
        {
        //实例化Socket对象
        	Socket sokClient = sokConnectionparn;
        	//定义接收数组
        	byte[] arrMsgRec = new byte[128];
        	while (true)
            {
            	 try
                 {
                 	//接收客户端数据	
                     int lengths = sokClient.Receive(arrMsgRec);
                 }
                 catch (SocketException ex)
                 {
                    //一方断开连接
                    break;
                 }
                 if(lengths>0){
                 	//做数据处理
                 }                        \
                 else { 
                   //没有任何数据
                 }
            }
        }

4.发送数据

/// <summary>
        /// 发送指令
        /// </summary>
        /// <param name="strMsg"></param>
        /// <param name="socket"></param>
        /// <returns></returns>
        public static bool SendData(string strMsg, Socket socket)
        {
        	// 将要发送的字符串转换成Utf-8字节数组;
            byte[] arrMsg = System.Text.Encoding.UTF8.GetBytes(strMsg); 
            try
            {
                socket.Send(arrMsg);
                return true;
            }
            catch (Exception see)
            {
                return false;
            }
        }

5.关闭TCP服务

/// <summary>
        /// 关闭TCP服务
        /// </summary>
        /// <param name="sokClient"></param>
        public static void CloseTCPserver(Socket sokClient)
        {
            sokClient.Shutdown(SocketShutdown.Both);
            sokClient.Close();
        }
发布了2 篇原创文章 · 获赞 4 · 访问量 95

猜你喜欢

转载自blog.csdn.net/m0_46783424/article/details/105681335
今日推荐