一、测试
1.打开 cmd输入 ping 10.160.52.106
测试能否与游戏服务器建立连接。
游戏服务器的 IP 10.160.52.106 是 校园网的内网IP
2.ping 通后,在输入命令 telnet
,进入 telnet 终端界面。
安装telnet服务: 链接.
3.输入set localecho
,打开本地回显。
4.输入命令 open 10.160.52.106 3900
连接游戏服务器,然后就进入了一个文字版的网游。如图:
二、客户端UI设计
1.用 VS2017 新建一个 Windows 窗体应用(.NET Framework) 的项目。
2.点击进入 From.cs[设计],设计如图:
三、代码实现
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Media;
namespace WindowsFormsApp4
{
public partial class Form1 : Form
{
//初始化一个TCPClient实例
Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
int num = 0;//记录当前图片
public Form1()
{
InitializeComponent();
IPAddress ipaddress = IPAddress.Parse("10.160.52.106");
EndPoint point = new IPEndPoint(ipaddress, 3900);
tcpClient.Connect(point);
update_TextBox();
pictureBox1.Image = Image.FromFile("./" + num.ToString() + ".jpg");
num++;
//实列化
System.Windows.Forms.Timer mytimer = new System.Windows.Forms.Timer();
//给timer绑定一个事件
mytimer.Tick += new EventHandler(change_Pic);
mytimer.Enabled = true;
//设置3毫秒的时间间隔
mytimer.Interval = 3000;
/*编码格式gdk转utf-8
string Mystring;
Encoding FromEcoding = Encoding.GetEncoding("gbk");
Encoding ToEcoding = Encoding.GetEncoding("UTF-8");
byte[] ToBytes = Encoding.Convert(FromEcoding, ToEcoding, data);
Mystring = ToEcoding.GetString(ToBytes);*/
}
//更改游戏背景图
private void change_Pic(object sender, EventArgs e)
{
int i = num % 4;
pictureBox1.Image = Image.FromFile("./" + i.ToString() + ".jpg");
num++;
}
//播放wav格式的背景音乐
private void music_play()
{
SoundPlayer sp = new SoundPlayer();
sp.SoundLocation = @"music.wav";
sp.PlayLooping();
}
//更新 richTextBox1 数据
private void update_TextBox()
{
richTextBox1.Clear();
byte[] data = new byte[2048];
//传递一个byte数组,用于接收数据。length表示接收了多少字节的数据
int length = tcpClient.Receive(data);
string message = Encoding.Default.GetString(data, 0, length);
richTextBox1.Text = message;
}
//添加richTextBox1数据
private void add_TextBox(string str)
{
try
{
byte[] sendBytes = Encoding.Default.GetBytes(str + "\n");
tcpClient.Send(sendBytes);
}
catch
{
}
try
{
byte[] data = new byte[2048];
//传递一个byte数组,用于接收数据。length表示接收了多少字节的数据
int length = tcpClient.Receive(data);
string message = Encoding.Default.GetString(data, 0, length);
richTextBox1.Text = richTextBox1.Text + message;
}
catch
{
}
}
private void label2_Click(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
//进入游戏
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text != "")
{
try
{
byte[] sendBytes = Encoding.Default.GetBytes(textBox1.Text + "\n");
tcpClient.Send(sendBytes);
update_TextBox();
//播放背景音乐
music_play();
}
catch
{
}
}
else
{
MessageBox.Show("用户名不能为空!", "Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
}
}
//退出游戏
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
//西北
private void button3_Click(object sender, EventArgs e)
{
add_TextBox("northwest");
}
//北
private void button4_Click(object sender, EventArgs e)
{
add_TextBox("north");
}
//东北
private void button5_Click(object sender, EventArgs e)
{
add_TextBox("northeast");
}
//西
private void button8_Click(object sender, EventArgs e)
{
add_TextBox("west");
}
//enter
private void button7_Click(object sender, EventArgs e)
{
add_TextBox("");
}
//东
private void button6_Click(object sender, EventArgs e)
{
add_TextBox("east");
}
//西南
private void button11_Click(object sender, EventArgs e)
{
add_TextBox("southwest");
}
//南
private void button10_Click(object sender, EventArgs e)
{
add_TextBox("south");
}
//东南
private void button9_Click(object sender, EventArgs e)
{
add_TextBox("southeast");
}
//发送消息
private void button12_Click(object sender, EventArgs e)
{
add_TextBox(textBox2.Text);
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
四、效果展示
扫描二维码关注公众号,回复:
12682668 查看本文章
emmm之前是成功的,好像学校服务器又出问题了,因为用 telnet client一直卡着
五、参考
链接: 用C#实现网游客户端(采用TCP方式连接校园网服务器).
六、总结
初步学习了使用C#编写一个网游客户端,实现了采用TCP连接,将服务器发来的消息不停地显示在listbox中;通过textbox或者点击button输入要发送给服务器的数据;能够播放背景音乐;每隔3秒换一次游戏背景图。