文章目录

  • 一、编写内容
  • 二、准备工作
    • 1. 创建项目
    • 2. 界面设计
    • 3. 连接服务器
    • 4. 发送数据
    • 5. 播放背景音乐
    • 6. 变化背景图片
    • 7. 效果演示
  • 三、完整代码
  • 四、参考

编译软件:Visual Studio 2019
编译环境:Windows 10
使用语言:C#

一、编写内容

本文章编写一个网游客户端,游戏服务器的校园内网IP地址为 10.160.230.74,端口为3900,采用TCP连接,主要功能有四个,如下:
①连接成功后,可以将服务器发来的消息不停地显示在 textbox 中;
②客户端要发给服务器的数据,通过 textbox 输入或者点击 button ;
③能够播放背景音乐;
④每隔30秒,变换一次游戏背景图片。
本文章涉及到了各个控件的基本使用、TCP的连接、客户端与服务器端的数据传输等等。

二、准备工作

1. 创建项目

  • 新建窗体应用,下一步,填写项目名和路径即可创建

  • 添加WindowsMediaPlayer 控件后续播放背景音乐需要使用到,点击工具,选择工具箱项,即是下图界面。

  • 选择 “ COM 组件 ” ,勾选上 “ Windows Media Player ” ,再点击 “ 确定 ” 。

2. 界面设计

  • textbox —— 2个(输入框、显示框)
  • button —— 5个(发送、进入游戏、退出游戏、播放、停止)
  • picturebox —— 1个(图片显示)
  • trackbar —— 1个(音量调节)
  • label —— 1个(音量显示)
  • groupbox —— 2个(控件容器)
  • WindowsMediaPlayer —— 1个(媒体播放器)
  • timer —— 1个(图片变化)


axWindowsMediaPlayer

3. 连接服务器

实现功能:点击连接游戏按钮后,能连接服务器,若连接成功,则将服务器发来的消息不停地显示在 textbox 中;若连接失败,则在 textbox 中显示 “ 服务器未启动 ” 。

  • 双击 “ 连接游戏 ” 按钮,转到代码编辑区。
    在 button2_Click 函数体内,编写连接的代码,
    代码:
private NetworkStream stream;
private TcpClient tcpClient = new TcpClient();private void button2_Click(object sender, EventArgs e){/** 连接服务器*/try{//向指定的IP地址的服务器发出连接请求tcpClient.Connect("10.1.230.74", 3900);textBox2.AppendText("连接成功!");stream = tcpClient.GetStream();byte[] data = new byte[1024];//判断网络流是否可读            if (stream.CanRead){int len = stream.Read(data, 0, data.Length);string msg = Encoding.Default.GetString(data, 0, data.Length);string str = "\r\n";char[] str1 = str.ToCharArray();string[] msg1 = msg.Split(str1);for (int j = 0; j < msg1.Length; j++){textBox2.AppendText(msg1[j]);}}}catch{textBox2.AppendText("服务器未启动!");}}

4. 发送数据

实现功能:客户端要发给服务器的数据,通过 textbox 输入,然后点击 button 发送出去,并将服务器端返回结果显示在 textbox 中。

  • 双击 “ 发送 ” 按钮,转到编辑代码的文件中,在 button1_Click 函数中编写以下的代码。
 private void button1_Click(object sender, EventArgs e){//判断连接是否断开if (tcpClient.Connected){//向服务器发送数据string msg = textBox1.Text;Byte[] outbytes = System.Text.Encoding.Default.GetBytes(msg + "\n");stream.Write(outbytes, 0, outbytes.Length);byte[] data = new byte[1024];//接收服务器回复数据if (stream.CanRead){int len = stream.Read(data, 0, data.Length);string msg1 = Encoding.Default.GetString(data, 0, data.Length);string str = "\r\n";char[] str1 = str.ToCharArray();string[] msg2 = msg1.Split(str1);for (int j = 0; j < msg2.Length; j++){   textBox2.AppendText(msg2[j]);}//刷新输入框textBox1.Clear();//将光标集中到输入框中textBox1.Focus();}}else{textBox2.AppendText("连接已断开");}}

5. 播放背景音乐

实现功能:当进入游戏后,开始播放背景音乐,并能调节音量大小。

private string s = @"I:\IOT\CsProject\GameClient\data\mp3\Bloom_of_Youth.mp3";
private void button4_Click(object sender, EventArgs e){axWindowsMediaPlayer1.Ctlcontrols.play();}private void button5_Click(object sender, EventArgs e){//用于暂停正在播放的背景音乐axWindowsMediaPlayer1.Ctlcontrols.pause();}

6. 变化背景图片

实现功能:每隔30秒我这里是3s方便演示,变换一次游戏背景图片。

代码:

 private void timer1_Tick(object sender, EventArgs e){flag++;string picturePath = @"I:\IOT\CsProject\GameClient\data\pictures\" + flag + ".jpeg";//设置图片填充pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;pictureBox1.Image = Image.FromFile(picturePath);if (flag == 4){flag = 0;}}

7. 效果演示

三、完整代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace GameClient
{public partial class Form1 : Form{public Form1(){InitializeComponent();trackBar1.Value = 0;label1.Text = "0";}//分别创建 TcpClient 和 NetworkStream 的对象private NetworkStream stream;private TcpClient tcpClient = new TcpClient();//定义flag变量private int flag = 0;//字符串存储音乐路径private string s = @"I:\IOT\CsProject\GameClient\data\mp3\Bloom_of_Youth.mp3";/****************** 进入游戏*****************/private void button2_Click(object sender, EventArgs e){/** 连接服务器*/try{//向指定的IP地址的服务器发出连接请求tcpClient.Connect("10.1.230.74", 3900);textBox2.AppendText("连接成功!");stream = tcpClient.GetStream();byte[] data = new byte[1024];//判断网络流是否可读            if (stream.CanRead){int len = stream.Read(data, 0, data.Length);string msg = Encoding.Default.GetString(data, 0, data.Length);string str = "\r\n";char[] str1 = str.ToCharArray();string[] msg1 = msg.Split(str1);for (int j = 0; j < msg1.Length; j++){textBox2.AppendText(msg1[j]);}}}catch{textBox2.AppendText("服务器未启动!");}/******************* 播放背景音乐******************///设置音量键值trackBar1.Value = 30;label1.Text = "30";//设置为循环播放axWindowsMediaPlayer1.settings.setMode("loop", true);//设置初始音乐的音量大小(范围:0——100)axWindowsMediaPlayer1.settings.volume = 30;//设置播放歌曲的路径axWindowsMediaPlayer1.URL = s;}private void axWindowsMediaPlayer1_Enter(object sender, EventArgs e){}private void button1_Click(object sender, EventArgs e){//判断连接是否断开if (tcpClient.Connected){//向服务器发送数据string msg = textBox1.Text;Byte[] outbytes = System.Text.Encoding.Default.GetBytes(msg + "\n");stream.Write(outbytes, 0, outbytes.Length);byte[] data = new byte[1024];//接收服务器回复数据if (stream.CanRead){int len = stream.Read(data, 0, data.Length);string msg1 = Encoding.Default.GetString(data, 0, data.Length);string str = "\r\n";char[] str1 = str.ToCharArray();string[] msg2 = msg1.Split(str1);for (int j = 0; j < msg2.Length; j++){   textBox2.AppendText(msg2[j]);}//刷新输入框textBox1.Clear();//将光标集中到输入框中textBox1.Focus();}}else{textBox2.AppendText("连接已断开");}}private void button4_Click(object sender, EventArgs e){axWindowsMediaPlayer1.Ctlcontrols.play();}private void button5_Click(object sender, EventArgs e){//用于暂停正在播放的背景音乐axWindowsMediaPlayer1.Ctlcontrols.pause();}private void trackBar1_Scroll(object sender, EventArgs e){//控制音量大小axWindowsMediaPlayer1.settings.volume = trackBar1.Value;//控制音量显示label1.Text = trackBar1.Value.ToString();}private void timer1_Tick(object sender, EventArgs e){flag++;string picturePath = @"I:\IOT\CsProject\GameClient\data\pictures\" + flag + ".jpeg";//设置图片填充pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;pictureBox1.Image = Image.FromFile(picturePath);if (flag == 4){flag = 0;}}private void button3_Click(object sender, EventArgs e){if (stream != null){stream.Close();tcpClient.Close();}textBox2.Clear();//停止播放背景音乐axWindowsMediaPlayer1.Ctlcontrols.stop();}}
}

四、参考

AxWindowsMediaPlayer的详细用法

C#编写网游客户端连接游戏服务器相关推荐

  1. 网狐大联盟本地游戏服务器部署

    1.编译游戏服务器工程 2.复制生成程序到服务器 3.启动游戏服务器

  2. Tableau实战 网游客户洞察分析仪表盘

    关注微信公共号:小程在线 关注CSDN博客:程志伟的博客 数据集见公共号链接 导入数据: 1.客户数据分析 a.将用户代码.编号放入维度:将年龄改为离散:右击年龄-创建数据通,详细如下: b.将 用户 ...

  3. Unity 利用花生壳搭建一个可供外网联机的游戏服务器

    目录 一.前言 二.安装花生壳 1.不需要使用HTTP接口 2.启动一个本地的服务器 3.启动内网穿透 三.游戏服务器 1.服务器代码 2.启动花生壳内网穿透 四.游戏客户端 1.客户端UI界面 2. ...

  4. 网狐棋牌客户端连接服务器修改方法6,网狐游戏服务器 客户端连接

    网狐游戏服务器 客户端连接 内容精选 换一换 本章节指导您使用MongoDB客户端和Robo 3T工具,通过公网连接副本集实例.用户可以直接操作副本集主节点和备节点.主节点用于读写请求,您可以连接主节 ...

  5. 酷睿i9-13900K性能出炉Steam游戏开发首选驰网独家i9-13900K服务器水冷定制高主频游戏服务器

    酷睿i9-13900K性能出炉Steam游戏开发首选驰网独家i9-13900K服务器水冷定制高主频游戏服务器 Intel13代智能酷睿i9-13900K CPU是英特尔2022年10月底发布的新款处理 ...

  6. 传奇网页服务器测试服,测试传奇游戏服务器网速的一些方法

    测试传奇游戏服务器网速的一些方法 本文出处:网游动力作者:本站发布时间:2018-08-20阅读次数: 前几天站长跟一些开传奇sf朋友们聊到服务器,说了配置.防护还有是速度等方面的内容,如果查看服务器 ...

  7. 吃鸡服务器维护咋回事,吃鸡游戏服务器连接失败怎么办 | 手游网游页游攻略大全...

    发布时间:2016-05-03 DNF从3月24日更新后登陆游戏会自动选择上次最后登陆游戏的频道进入,不会再出现频道选择界面,当上次的频道爆满后,玩家就无法登陆进入游戏了,小编也遇到过这种情况,后来经 ...

  8. 易乐游无盘服务器网卡设置,技术帖 | 易乐游客户机网卡PNP设置

    原标题:技术帖 | 易乐游客户机网卡PNP设置 关注易乐游(微信/头条/搜狐/一点),了解网吧行业最新动态. 该功能适用于无盘网吧,开启网卡PNP功能后,可以在网吧服务器上更新客户机网卡驱动和修改客户 ...

  9. 用超级计算机当游戏服务器,超级计算机做服务器 中国网游照样卡死你

    国内游戏服务器通常使用的架构(仅供参考 如上图所示,国内外采用的服务器架构大多数是这样的架构,或者是从这种架构中精简,这种服务器架构理论承载值1万~1.5万人,但是如果想要达到理论值必须是让那些玩家均 ...

最新文章

  1. 想提高代码水平,做到这点就够了
  2. var_export()函数的使用举例(后续添加其他的php输出函数)
  3. JS-JavaScript学习笔记(一)
  4. 重磅发布 | 承载亿级流量的开发框架,闲鱼Flutter技术解析与实战大公开
  5. 超高清视觉体验需要哪些技术栈?
  6. Codeforces Round #701 (Div. 2) C. Floor and Mod 数学分块
  7. 主要的css hack
  8. 如何用iOS工程生成iOS模拟器包
  9. [120_移动开发Android]007_android开发之SAX操作XML文件
  10. io读取一个文件再写入socket技术_Kafka必须掌握的核心技术--为什么吞吐量大、速度快?...
  11. kvm虚拟化学习笔记(五)之windows虚拟机性能调整
  12. Jmeter---Jmeter安装教程
  13. VR养狗,养的是寂寞还是潮流?
  14. [18调剂]上海海洋大学2018年硕士研究生调剂政策与规则
  15. ESXI VIB升级报错
  16. 11 JavaScript删除链表的节点 牛客网JZ18
  17. 在 sys.servers 中找不到服务器 '******'。请验证指定的服务器名称是否正确。
  18. duang!各位期待的傻猴更新稳定版来了~
  19. Pandas 删除列
  20. 远程桌面连接时,用电脑名不能连接,用IP就可以,为什么

热门文章

  1. python制作天气预报软件(UI界面)
  2. 持续迭代、永久更新的WIN NFT HORSE,具有无穷无尽的生命力
  3. Redis Sentinel配置
  4. DARPA 的 RACER 计划全面推进越野高速自动驾驶汽车
  5. iOS冰与火之歌番外篇 - 在非越狱手机上进行App Hook(转载)
  6. 1718 Cos的多项式
  7. word文档在页面上浏览,类似百度文库形式
  8. 代谢组学数据处理软件——NormalizeMets
  9. 【前端学习笔记】浮动属性
  10. vue-router路由重复点击时报错的解决方案