日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#编写网游客户端连接游戏服务器

發布時間:2024/3/12 C# 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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#编写网游客户端连接游戏服务器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。