网络通信编程学习------C#编写一个简易客户端
网络通信编程学习------C#编写一个简易客户端
需要实现的效果
- (简答题) 编写一个网游客户端,游戏服务器的校园内网IP地址为 10.1.230.74,端口为3900,采用TCP连接。
- 连接成功后,可以将服务器发来的消息不停地显示在 listbox 中;
- 客户端要发给服务器的数据,通过 textbox输入 或者点击button;3) 能够播放背景音乐;4) 每隔30秒,变换一次游戏背景图片。参考代码框架见 game1.zip
1.NetworkStream网络流介绍
NetworkStream常用的属性和方法
2.创建项目
打开visualstduio,创建一个.net框架的窗口化项目。
界面大致如图所示:
(PS:由于需要实现的功能较少所以起始不需要这么复杂,只需要一个图片框,一个文本框,三个按钮即可)
3.通过网络流对象建立对游戏服务器的连接
由于建立连接是需要在窗口创建时就完成的,所以在form1代码中放入以下代码,建立一个连接,由于使用网络操作注意需要try catch
public Form1()
{
InitializeComponent();
try
{
//向指定的IP地址的服务器发出连接请求
tcpClient.Connect("10.1.230.74",3900);
listBox1.Items.Add("连接成功!");
stream = tcpClient.GetStream();
byte[] data = new byte[1024];
//判断网络流是否可读
if (stream.CanRead)
{
int len = stream.Read(data, 0, data.Length);
//Encoding ToEncoding = Encoding.GetEncoding("UTF-8");
Encoding FromEncoding = Encoding.GetEncoding("GB2312");
//data=Encoding.Convert(FromEncoding, ToEncoding, data);
//string msg = Encoding.UTF8.GetString(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++)
{
listBox1.Items.Add(msg1[j]);
}
}
}
catch
{
listBox1.Items.Add("服务器未启动!");
}
}
这时我们直接运行程序便可以看到已经成功连接上,可以看到服务器返回的文本内容在文本框里显示了。
4.通过点击按钮,将文本框里的内容发送到客户端
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++)
{
listBox1.Items.Add(msg2[j]);
}
}
textBox1.Clear();
}
else
{
listBox1.Items.Add("连接已断开");
}
5.通过windowsmedia控件实现播放音乐
在选项工具箱项中为工具箱添加如上控件。
再从工具箱中拖一个到项目之中,再对两个按钮添加如下事件
private void button13_Click(object sender, EventArgs e)
{
string s = @"D:/CloudMusic/Oracle.mp3";
axWindowsMediaPlayer1.URL = s;
}
private void button14_Click(object sender, EventArgs e)
{
//用于暂停正在播放的背景音乐
axWindowsMediaPlayer1.Ctlcontrols.pause();
}
6实现游戏背景变换
这个利用Timer控件的tick事件来实现的,此处是利用Timer每隔3s会重新执行一次,然后pictureBox控件的图片路径就被修改。从而,实现图片的变换。
在工具箱中像项目拖一个Timer控件,注意设置它的属性,使他可用
然后在文件夹中添加如下代码,加上自己的图片路径就可以了。
int flag = 0;
private void timer1_Tick(object sender, EventArgs e)
{
flag++;
string picturePath = @"";
pictureBox1.Image = Image.FromFile(picturePath);
if (flag == 6)
{
flag = 0;
}
}