.NET简陋服务器

爷,独闯天下 提交于 2020-10-17 19:57:47

服务器是干啥子用滴?监听客户端,响应客户端用滴!

虽然是世界上最简陋的服务器,但是也有几个注意点:

1.因为要一个死循环监听客户端响应,也就是说无法和用户进行交互了,所以防止前台假死就要为监听新起一个线程;

2.要把新起的线程td.IsBackground = true;设置为后台线程,这样的话线程才会随着应用程序的关闭而关闭,不然的话关了窗体,它还在运行;

3.跨线程问题,在新的线程里改变UI会报跨线程改变UI的错误,所以要用Invoke;

4.在监听的死循环中加入  Thread.Sleep(1);这样可以提高应用程序性能,不要担心当服务的线程正在Sleep的时候来了个请求服务器会收不到,其实是收得到的。

 

加入Thread.Sleep(1)的CPU如图:

不加Thread.Sleep(1)的CPU如图:

所以一定要加!

所以服务器端代码如下:

 1  using  System;

 2  using  System.Collections.Generic;

 3  using  System.ComponentModel;

 4  using  System.Data;

 5  using  System.Drawing;

 6  using  System.Linq;

 7  using  System.Text;

 8  using  System.Windows.Forms;

 9 

10  using  System.Threading;

11  using  System.Net;

12  using  System.Net.Sockets;

13 

14 

15  namespace  Server

16  {

17       public   partial   class  Form1 : Form

18      {

19           public  Form1()

20          {

21              InitializeComponent();

22          }

23 

24           private   void  button1_Click( object  sender, EventArgs e)

25          {

26              Thread td  =   new  Thread(Listen);

27              td.IsBackground  =   true ;

28              td.Start();

29               this .button1.Enabled  =   false ;

30              MessageBox.Show( " 服务器成功开启 " );

31 

32          }

33           public   delegate   void  ChangeRickBoxHandler(RichTextBox rtb, string  str);

34           public   void  ChangeRichTextBox(RichTextBox rtb, string  str)

35          {

36              rtb.AppendText(str);

37          }

38           private   void  Listen()

39          {

40              IPAddress ip  =  Dns.GetHostAddresses(Dns.GetHostName())[ 0 ];

41               int  port  =  Int32.Parse( this .textBox1.Text.Trim());

42              TcpListener tl  =   new  TcpListener(ip, port);

43              tl.Start();

44               while ( true )

45              {

46                   if  (tl.Pending())

47                  {

48                      Socket newSocket  =  tl.AcceptSocket();                    

49                       byte [] buff  =   new   byte [ 9 ];

50                       int  length =    newSocket.Receive(buff);

51                       string  command  =  Encoding.Default.GetString(buff);

52                       if (command  ==   " conServer " )                  

53                      {

54                          Invoke( new  ChangeRickBoxHandler(ChangeRichTextBox), this .richTextBox1, " 有客户端连接了我 " );

55                      }

56                  }

57                Thread.Sleep( 1 );

58              }

59          }

60      }

61  }

62 

 

 

 

客户端代码:

 1  using  System;

 2  using  System.Collections.Generic;

 3  using  System.ComponentModel;

 4  using  System.Data;

 5  using  System.Drawing;

 6  using  System.Linq;

 7  using  System.Text;

 8  using  System.Windows.Forms;

 9 

10  using  System.Net;

11  using  System.Net.Sockets;

12  using  System.Threading;

13 

14  namespace  Client

15  {

16       public   partial   class  Form1 : Form

17      {

18           public  Form1()

19          {

20              InitializeComponent();

21          }

22 

23           private   void  button1_Click( object  sender, EventArgs e)

24          {

25           TcpClient tcpClient  =   new  TcpClient();

26           tcpClient.Connect(  Dns.GetHostAddresses(Dns.GetHostName())[ 0 ], Convert.ToInt32( this .textBox1.Text.Trim().ToString()));

27           NetworkStream   nwStream  =  tcpClient.GetStream();

28            string  cmd  =   " conServer "  ;

29           Byte[] bytes  =  Encoding.Default.GetBytes(cmd.ToCharArray());

30           nwStream.Write(bytes,  0 , bytes.Length);         

31          }

32      }

33  }

34 

 

 

源码下载===>/Files/zhanglei644213943/世界上最简陋的服务器.rar

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!