C#编写网游客户端连接游戏服务器
文章目录
- 一、编写内容
- 二、准备工作
- 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.编译游戏服务器工程 2.复制生成程序到服务器 3.启动游戏服务器
- Tableau实战 网游客户洞察分析仪表盘
关注微信公共号:小程在线 关注CSDN博客:程志伟的博客 数据集见公共号链接 导入数据: 1.客户数据分析 a.将用户代码.编号放入维度:将年龄改为离散:右击年龄-创建数据通,详细如下: b.将 用户 ...
- Unity 利用花生壳搭建一个可供外网联机的游戏服务器
目录 一.前言 二.安装花生壳 1.不需要使用HTTP接口 2.启动一个本地的服务器 3.启动内网穿透 三.游戏服务器 1.服务器代码 2.启动花生壳内网穿透 四.游戏客户端 1.客户端UI界面 2. ...
- 网狐棋牌客户端连接服务器修改方法6,网狐游戏服务器 客户端连接
网狐游戏服务器 客户端连接 内容精选 换一换 本章节指导您使用MongoDB客户端和Robo 3T工具,通过公网连接副本集实例.用户可以直接操作副本集主节点和备节点.主节点用于读写请求,您可以连接主节 ...
- 酷睿i9-13900K性能出炉Steam游戏开发首选驰网独家i9-13900K服务器水冷定制高主频游戏服务器
酷睿i9-13900K性能出炉Steam游戏开发首选驰网独家i9-13900K服务器水冷定制高主频游戏服务器 Intel13代智能酷睿i9-13900K CPU是英特尔2022年10月底发布的新款处理 ...
- 传奇网页服务器测试服,测试传奇游戏服务器网速的一些方法
测试传奇游戏服务器网速的一些方法 本文出处:网游动力作者:本站发布时间:2018-08-20阅读次数: 前几天站长跟一些开传奇sf朋友们聊到服务器,说了配置.防护还有是速度等方面的内容,如果查看服务器 ...
- 吃鸡服务器维护咋回事,吃鸡游戏服务器连接失败怎么办 | 手游网游页游攻略大全...
发布时间:2016-05-03 DNF从3月24日更新后登陆游戏会自动选择上次最后登陆游戏的频道进入,不会再出现频道选择界面,当上次的频道爆满后,玩家就无法登陆进入游戏了,小编也遇到过这种情况,后来经 ...
- 易乐游无盘服务器网卡设置,技术帖 | 易乐游客户机网卡PNP设置
原标题:技术帖 | 易乐游客户机网卡PNP设置 关注易乐游(微信/头条/搜狐/一点),了解网吧行业最新动态. 该功能适用于无盘网吧,开启网卡PNP功能后,可以在网吧服务器上更新客户机网卡驱动和修改客户 ...
- 用超级计算机当游戏服务器,超级计算机做服务器 中国网游照样卡死你
国内游戏服务器通常使用的架构(仅供参考 如上图所示,国内外采用的服务器架构大多数是这样的架构,或者是从这种架构中精简,这种服务器架构理论承载值1万~1.5万人,但是如果想要达到理论值必须是让那些玩家均 ...
最新文章
- 想提高代码水平,做到这点就够了
- var_export()函数的使用举例(后续添加其他的php输出函数)
- JS-JavaScript学习笔记(一)
- 重磅发布 | 承载亿级流量的开发框架,闲鱼Flutter技术解析与实战大公开
- 超高清视觉体验需要哪些技术栈?
- Codeforces Round #701 (Div. 2) C. Floor and Mod 数学分块
- 主要的css hack
- 如何用iOS工程生成iOS模拟器包
- [120_移动开发Android]007_android开发之SAX操作XML文件
- io读取一个文件再写入socket技术_Kafka必须掌握的核心技术--为什么吞吐量大、速度快?...
- kvm虚拟化学习笔记(五)之windows虚拟机性能调整
- Jmeter---Jmeter安装教程
- VR养狗,养的是寂寞还是潮流?
- [18调剂]上海海洋大学2018年硕士研究生调剂政策与规则
- ESXI VIB升级报错
- 11 JavaScript删除链表的节点 牛客网JZ18
- 在 sys.servers 中找不到服务器 '******'。请验证指定的服务器名称是否正确。
- duang!各位期待的傻猴更新稳定版来了~
- Pandas 删除列
- 远程桌面连接时,用电脑名不能连接,用IP就可以,为什么