端口扫描器和网游客户端

一、 C#实现端口扫描小程序

1、UI界面设计

工具使用:VS2017
①使用VS2017新建一个Windows窗体应用(.NET Framework)项目

②在Program.cs中设计窗口形式如下
在这里插入图片描述
完成各个窗口属性功能

2、使用单一进程实现端口扫描

代码
下面展示一些 内联代码片

private void PortScan()
        {
            start = Int32.Parse(txtStart.Text);
            end = Int32.Parse(txtEnd.Text);
            //检查输入范围合法性
            if ((start >= 0 && start <= 65536) && (end >= 0 && end <= 65536) && (start <= end))
            {
                lbResult.Items.Add("开始扫描... (可能需要请您等待几分钟)");
                Addr = txtAddr.Text;
                for (int i = start; i <= end; i++)
                {
                    progressBar1.Value = i;
                    lblNow.Text = i.ToString();
                    try
                    {
                        TcpClient tcp = new TcpClient(Addr, i);
                        lbResult.Items.Add("端口 " + i.ToString() + " 开放!");
                    }
                    catch
                    {
                    }
                }
                //未完成时情况
                while (!OK)
                {
                    OK = true;
                    for (int i = start; i <= end; i++)
                    {
                        if (!done[i])
                        {
                            OK = false;
                            break;
                        }
                    }
                    System.Threading.Thread.Sleep(1000);
                }
                lbResult.Items.Add("扫描结束!");
            }
            else
            {
                MessageBox.Show("输入错误,端口范围为[0-65536]");
            }
        }


完成之后运行单线程扫描,效果如下:

3、使用多线程实现端口扫描

修改代码如下:

private void PortScan()
        {
            start = Int32.Parse(txtStart.Text);
            end = Int32.Parse(txtEnd.Text);
            //检查输入范围合法性
            if ((start >= 0 && start <= 65536) && (end >= 0 && end <= 65536) && (start <= end))
            {
                lbResult.Items.Add("开始扫描... (可能需要请您等待几分钟)");
                Addr = txtAddr.Text;
                for (int i = start; i <= end; i++)
                {
                    port = i;
                    //使用该端口的扫描线程
                   scanThread = new Thread(new ThreadStart(Scan));
                    scanThread.Start();
                    //使线程睡眠
                    System.Threading.Thread.Sleep(100);
                    progressBar1.Value = i;
                    lblNow.Text = i.ToString();
                }
                //未完成时情况
                while (!OK)
                {
                    OK = true;
                    for (int i = start; i <= end; i++)
                    {
                        if (!done[i])
                        {
                            OK = false;
                            break;
                        }
                    }
                    System.Threading.Thread.Sleep(1000);
                }
                lbResult.Items.Add("扫描结束!");
            }
            else
            {
                MessageBox.Show("输入错误,端口范围为[0-65536]");
            }
        }
        private void Scan()
        {
            int portnow = port;
            //创建线程变量
            Thread Threadnow = scanThread;
            done[portnow] = true;
            //创建TcpClient对象,TcpClient用于为TCP网络服务提供客户端连接
            TcpClient objTCP = null;
            //扫描端口,成功则写入信息
            try
            {
                //用TcpClient对象扫描端口
                objTCP = new TcpClient(Addr, portnow);
                lbResult.Items.Add("端口 " + portnow.ToString() + " 开放!");
            }
            catch
            {
            }
        }


在这里插入图片描述

二、用C#实现网络游戏客户端

1、在win10下用telnet进行测试

①打开cmd,在能够ping通10.160.52.106(需要在校园网内,不然会显示请求超时)
像那个下面这样

在这里插入图片描述

②在①的前提下,输入命令talnet,进入该终端界面

扫描二维码关注公众号,回复: 12913971 查看本文章

③输入命令open 10.160.52.106,进入该游戏

在这里插入图片描述

2、UI设计

用VS2017建立一个窗体应用项目
设计界面.cs

下面这个样子

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ios8tpkX-1605857751589)(C:\Users\TBM\Desktop\01.png)]

3、主要代码实现

(1)添加命名空间
using System.Net.Sockets;
using System.Net;
using System.Media;
(2)建立TCP连接
Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipaddress = IPAddress.Parse(“10.160.52.106”);
EndPoint point = new IPEndPoint(ipaddress, 3900);
tcpClient.Connect(point);
(3)接受服务器信息
byte[] data = new byte[2048];
//传递一个byte数组,用于接收数据。length表示接收了多少字节的数据
int length = tcpClient.Receive(data);
string message = Encoding.Default.GetString(data, 0, length);
richTextBox1.Text = message;

(4)向服务器发送信息
byte[] sendBytes = Encoding.Default.GetBytes(textBox1.Text+"\n");
tcpClient.Send(sendBytes);

(5)实现背景音乐播放
SoundPlayer sp = new SoundPlayer();
sp.SoundLocation = @“music.wav”;
sp.PlayLooping();

(6)实现背景图片切换
//实列化
System.Windows.Forms.Timer mytimer = new System.Windows.Forms.Timer();
//给timer绑定一个事件
mytimer.Tick += new EventHandler(change_Pic);
mytimer.Enabled = true;
//设置30毫秒的时间间隔
mytimer.Interval = 30000;

4、效果展示

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/iostreamhvoid/article/details/109864652