C#编写网游客户端连接游戏服务器

一、创建项目

创建一个窗体项目;
添加WindowsMediaPlayer控件
在这里插入图片描述
选择 “ COM 组件 ” ,勾选上 “ Windows Media Player ” ,再点击 “ 确定 ” 。
在这里插入图片描述
界面设置:
在这里插入图片描述
属性设置:
在这里插入图片描述
在这里插入图片描述

二、连接服务器

双击button2“开始游戏”按钮
添加代码:
头文件:

using System.Net.Sockets;
        private void button2_Click(object sender, EventArgs e)
        {
            /*
       * 连接服务器
       */
            try
            {
                //实例化
                tcpClient = new TcpClient();
                //向指定的IP地址的服务器发出连接请求
                tcpClient.Connect("10.1.230.74", 3900);
                //获取网络传输流
                stream = tcpClient.GetStream();
                //接受数据并转化为字符串
                byte[] data = new byte[1024];
                int receive = stream.Read(data, 0, 1024);
                string msg = Encoding.Default.GetString(data, 0, receive);

                //显示出来
                textBox2.AppendText(msg);
            }
            catch
            {
                textBox2.AppendText("服务器未启动" + Environment.NewLine);
            }
}
/*****************
         * 去除终端转移字符
         *****************/
        private string strDelete(string str)
        {
            int flag = -1, de = 0;
            for (int i = 0; i < str.Length; i++)
            {
                if (str[i] == ' ')
                {
                    flag = i;
                }
                if (flag != -1)
                {
                    de++;
                }
                if (str[i] == 'm' && flag != -1)
                {
                    str = str.Remove(flag, de);
                    i = flag - 1;
                    flag = -1;
                    de = 0;
                }
            }
            return str;

        }

试运行:
在这里插入图片描述

Win+R输入cmd
ping 10.1.230.74
telnet
可能会出现**‘telnet’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。**

问题解决:打开控制面板
在这里插入图片描述
重启程序即可;

三、数据传输

双击button1”发送“按钮,
添加代码:

 private void button1_Click(object sender, EventArgs e)
        {

            //获取textBox1内的文本内容
            string msg = textBox1.Text + "\n";
            //将文本内容转化成比特流并发送给服务器
            byte[] data = new byte[1024];
            data = Encoding.Default.GetBytes(msg);
            stream.Write(data, 0, data.Length);
            //接收服务器端传来的数据流并转化为字符串
            byte[] data1 = new byte[1024];
            int receive = stream.Read(data1, 0, 1024);
            msg = Encoding.Default.GetString(data1, 0, receive);
            //去除字符串中的终端转义字符
            msg = strDelete(msg);
            //清除显示框之前的内容
            textBox2.Clear();
            //显示数据
            textBox2.AppendText(msg);
            //刷新输入框
            textBox1.Clear();
            //将光标集中到输入框中
            textBox1.Focus();

        }

试运行:
在这里插入图片描述

四、播放背景音乐

添加代码:
设置音量调节初始值为50,

      public UserControl1()
        {
            InitializeComponent();

            trackBar1.Value = 50;
            label1.Text = "50";
            axWindowsMediaPlayer1.Hide();
        }

在button2控件中添加代码:

private void button2_Click(object sender, EventArgs e)
        {
            /*
       * 连接服务器
       */
            try
            {
                //实例化
                tcpClient = new TcpClient();
                //向指定的IP地址的服务器发出连接请求
                tcpClient.Connect("10.1.230.74", 3900);
                //获取网络传输流
                stream = tcpClient.GetStream();
                //接受数据并转化为字符串
                byte[] data = new byte[1024];
                int receive = stream.Read(data, 0, 1024);
                string msg = Encoding.Default.GetString(data, 0, receive);

                //显示出来
                textBox2.AppendText(msg);
            }
            catch
            {
                textBox2.AppendText("服务器未启动" + Environment.NewLine);
            }

            /******************
             * 播放背景音乐
             ******************/
            //设置音量键值
            trackBar1.Value = 50;
            label1.Text = "50";
            //字符串存储音乐路径
            string s = @"D:\110.mp3";
            //设置为循环播放
            axWindowsMediaPlayer1.settings.setMode("loop", true);
            //设置初始音乐的音量大小(范围:0——100)
            axWindowsMediaPlayer1.settings.volume = 50;
            //设置播放歌曲的路径
            axWindowsMediaPlayer1.URL = s;
        }

五、变换背景图片

添加timer控件
注意:添加到窗体上而不是控件

将timer属性中的enabled改为True
键Interval改为3000(3000ms=3s)三秒变化一次
(演示方便写为3s,30s变化一次就是30000)

双击timer添加如下代码:

 private void timer1_Tick(object sender, EventArgs e)
        {
            flag++;
            string picturePath = @"D:\Pictures\" + flag + ".jpg";
            //设置图片填充
            pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
            pictureBox1.Image = Image.FromFile(picturePath);
            if (flag == 5)
            {
                flag = 0;
            }

        }

运行;
在这里插入图片描述

六、全部代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Sockets;

namespace geam
{
    public partial class UserControl1: UserControl
    {
        public UserControl1()
        {
            InitializeComponent();

            trackBar1.Value = 50;
            label1.Text = "50";
            axWindowsMediaPlayer1.Hide();
        }

        private void UserControl1_Load(object sender, EventArgs e)
        {

        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        private void button3_Click(object sender, EventArgs e)
        {

        }
        TcpClient tcpClient;
        NetworkStream stream;

        private void button2_Click(object sender, EventArgs e)
        {
            /*
       * 连接服务器
       */
            try
            {
                //实例化
                tcpClient = new TcpClient();
                //向指定的IP地址的服务器发出连接请求
                tcpClient.Connect("10.1.230.74", 3900);
                //获取网络传输流
                stream = tcpClient.GetStream();
                //接受数据并转化为字符串
                byte[] data = new byte[1024];
                int receive = stream.Read(data, 0, 1024);
                string msg = Encoding.Default.GetString(data, 0, receive);

                //显示出来
                textBox2.AppendText(msg);
            }
            catch
            {
                textBox2.AppendText("服务器未启动" + Environment.NewLine);
            }

            /******************
             * 播放背景音乐
             ******************/
            //设置音量键值
            trackBar1.Value = 50;
            label1.Text = "50";
            //字符串存储音乐路径
            string s = @"D:\110.mp3";
            //设置为循环播放
            axWindowsMediaPlayer1.settings.setMode("loop", true);
            //设置初始音乐的音量大小(范围:0——100)
            axWindowsMediaPlayer1.settings.volume = 50;
            //设置播放歌曲的路径
            axWindowsMediaPlayer1.URL = s;
        }


        /*****************
         * 去除终端转移字符
         *****************/
        private string strDelete(string str)
        {
            int flag = -1, de = 0;
            for (int i = 0; i < str.Length; i++)
            {
                if (str[i] == ' ')
                {
                    flag = i;
                }
                if (flag != -1)
                {
                    de++;
                }
                if (str[i] == 'm' && flag != -1)
                {
                    str = str.Remove(flag, de);
                    i = flag - 1;
                    flag = -1;
                    de = 0;
                }
            }
            return str;

        }

        private void button1_Click(object sender, EventArgs e)
        {

            //获取textBox1内的文本内容
            string msg = textBox1.Text + "\n";
            //将文本内容转化成比特流并发送给服务器
            byte[] data = new byte[1024];
            data = Encoding.Default.GetBytes(msg);
            stream.Write(data, 0, data.Length);
            //接收服务器端传来的数据流并转化为字符串
            byte[] data1 = new byte[1024];
            int receive = stream.Read(data1, 0, 1024);
            msg = Encoding.Default.GetString(data1, 0, receive);
            //去除字符串中的终端转义字符
            msg = strDelete(msg);
            //清除显示框之前的内容
            textBox2.Clear();
            //显示数据
            textBox2.AppendText(msg);
            //刷新输入框
            textBox1.Clear();
            //将光标集中到输入框中
            textBox1.Focus();

        }

        private void trackBar1_Scroll(object sender, EventArgs e)
        {
            //控制音量大小
            axWindowsMediaPlayer1.settings.volume = trackBar1.Value;
            //控制音量显示
            label1.Text = trackBar1.Value.ToString();
        }
        private int flag = 0;
        private void timer1_Tick(object sender, EventArgs e)
        {
            flag++;
            string picturePath = @"D:\Pictures\" + flag + ".jpg";
            //设置图片填充
            pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
            pictureBox1.Image = Image.FromFile(picturePath);
            if (flag == 5)
            {
                flag = 0;
            }

        }
    }
}

七、参考博客

https://blog.csdn.net/ssj925319/article/details/109746267

猜你喜欢

转载自blog.csdn.net/changlingMYlove/article/details/121563773