LYT-C#-Socket-ServerTEST

Posted Violin_Huang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LYT-C#-Socket-ServerTEST相关的知识,希望对你有一定的参考价值。

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

namespace Crltest

   public class Program
    
        static string msg = null;
        static void Main(string[] args)
        
            //创建一个新的Socket,这里我们使用最常用的基于TCP的Stream Socket(流式套接字)
            var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            //将该socket绑定到主机上面的某个端口
            //方法参考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.bind.aspx
            socket.Bind(new IPEndPoint(IPAddress.Any, 4530));

            //启动监听,并且设置一个最大的队列长度
            //方法参考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.listen(v=VS.100).aspx
            socket.Listen(4);

            //开始接受客户端连接请求
            //方法参考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.beginaccept.aspx
            socket.BeginAccept(new AsyncCallback((ar) =>
            
                //这就是客户端的Socket实例,我们后续可以将其保存起来
                var client = socket.EndAccept(ar);

                //给客户端发送一个欢迎消息

                client.Send(Encoding.Unicode.GetBytes("Hi there, I accept you request at " + DateTime.Now.ToString()));


                //实现每隔两秒钟给服务器发一个消息
                //这里我们使用了一个定时器
                var timer = new System.Timers.Timer();
                timer.Interval = 2000D;
                timer.Enabled = true;
                timer.Elapsed += (o, a) =>
                
                    //检测客户端Socket的状态
                    if (client.Connected)
                    
                        try
                        
                            string strA = Console.ReadLine();
                            client.Send(Encoding.Unicode.GetBytes(strA));
                            //client.Send(Encoding.Unicode.GetBytes("Message from server at " + DateTime.Now.ToString()));
                        
                        catch (SocketException ex)
                        
                            Console.WriteLine(ex.Message);
                        
                    
                    else
                    
                        timer.Stop();
                        timer.Enabled = false;
                        Console.WriteLine("Client is disconnected, the timer is stop.");
                    
                ;
                timer.Start();


                //接收客户端的消息(这个和在客户端实现的方式是一样的)
                client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), client);

            ), null);


            Console.WriteLine("Server is ready!");
            while (true)
            
                if (msg == "1\\0")
                
                    Console.WriteLine("111111111111111111111111111111111111");
                    msg = "0";
                
            
            Console.Read();
        

        static byte[] buffer = new byte[1024];

        public static void ReceiveMessage(IAsyncResult ar)
        
            try
            
                var socket = ar.AsyncState as Socket;

                //方法参考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.endreceive.aspx
                var length = socket.EndReceive(ar);
                //读取出来消息内容
                msg = Encoding.Unicode.GetString(buffer, 0, length);
                //显示消息
                Console.WriteLine(msg);

                //接收下一个消息(因为这是一个递归的调用,所以这样就可以一直接收消息了)
                socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), socket);
            
            catch (Exception ex)
            
                Console.WriteLine(ex.Message);
            
        
    
    

 

LYT-C#-winform 弹出输入框(提示框)

以上是关于LYT-C#-Socket-ServerTEST的主要内容,如果未能解决你的问题,请参考以下文章

LYT-C#-winform 弹出输入框(提示框)