IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 编写一个网游客户端 -> 正文阅读

[系统运维]编写一个网游客户端

目录

一、认识NetworkStream(网络流)

二、环境准备

三、项目创建

三、总结


一、认识NetworkStream(网络流)

NetworkStream的相关知识点
①NetworkStream只能使用于具有TCP/IP协议之中,用于UDP中虽然不会报错,但是会出现异常。
②NetworkStream是面向连接的。
③NetworkStream是利用流的形式进行传输信息。
NetworkStream常用的属性和方法
属性或方法?? ?解释
CanRead?? ?流是否支持读取,可以从流中读取数据,返回为true
DataAvailable?? ?看读取的流上是否有可用的数据,常用来判断流是否还有数据
Read(byte[] buffer,int offset,int size)?? ?将数据读入到buffer中,并返回成功读取的字节数
Write(byte[] buffer,int offset,int size)?? ?将buffer中的数据内容发送到网络
了解NetworkStream,有助于帮助后面采用TcpClient进行数据收发,有兴趣也可以了解一下StreamReader,StreamWriter。

二、环境准备

编译软件:VS2019

操作系统:Windows10

客户端要求:

编写一个网游客户端,游戏服务器的校园内网IP地址为 10.1.230.74,端口为3900,采用TCP连接。

1)连接成功后,可以将服务器发来的消息不停地显示在 listbox 中;

2) 客户端要发给服务器的数据,通过 textbox输入 或者点击button;

3) 能够播放背景音乐;

4) 每隔30秒,变换一次游戏背景图片。
?

三、项目创建

还是新建一个Windows窗体应用

创建好工程后,首先要添加一个WindowsMediaPlayer 的控件,用于播放音乐

点击工具箱,右键常规,选择项

?

添加好之后,设计一个如下界面

然后将音量调节设置为最大100

?

?然后双击开始游戏按钮,进入代码界面

 TcpClient tcpClient;
        NetworkStream stream;
        private void Btn_start_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);
                //显示出来
                MainView.AppendText(msg);
            }
            catch
            {
                MainView.AppendText("服务器未启动" + Environment.NewLine);
            }
        }

点击开始游戏

?运行结果

?

双击发送按钮,生成onclick函数,编写代码发送请求

   private void Btn_send_Click(object sender, EventArgs e)
        {
            //获取InputView内的文本内容
            string msg = inputView.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);
            //清除显示框之前的内容
            MainView.Clear();
            //显示数据
            MainView.AppendText(msg);
            //刷新输入框
            inputView.Clear();
            //将光标集中到输入框中
            inputView.Focus();
        }

运行结果

?

添加背景音乐

在构造函数中添加以下代码

  public Form1()
        {
            InitializeComponent();
 
                //设置音量调节器的初始位置
                VolumnBar.Value = 50;
                lbl_volumn.Text = "50";
                MediaPlayer.Hide();
 
        }

然后在Btn_start的点击函数中加入这段代码

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

双击音量调节滑动条,写入代码

  private void VolumnBar_Scroll(object sender, EventArgs e)
        {
                //控制音量大小
                MediaPlayer.settings.volume = VolumnBar.Value;
                //控制音量显示
                lbl_volumn.Text = VolumnBar.Value.ToString();
 
        }

图片轮播

?在工具箱中找到Timer控件,将它拖入窗体中

Timer的设置

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

?其中PicturePath是放图片的路径

里面存放4张图片

运行效果

?

三、总结

本文章的服务器端是建立在学校里的,如果要连上去,需要连上学校的网,才能够登录上去,是内网的 IP ,主要学习是如何通过 C# 的 TcpClient 类建立连接,并使用 NetworkStream 类传输数据,注意,在将字符串编码成比特流时,主要编码方式要与解码方式相同,不然会出现乱码。
?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-28 11:39:26  更:2021-11-28 11:41:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:22:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码