1 / 1 / 1
Регистрация: 27.11.2010
Сообщений: 8
|
||||||
1 | ||||||
Ошибка в передаче данный, клиент-сервер, пин-понг, теннис22.03.2011, 20:27. Просмотров 1411. Ответов 2
Метки нет Все метки)
(
Здравствуйте. Не могу понять, почему и где происходит ошибка. Косячит сама передача данных, клиент подключается к серверу, вроде начинается игра, но сервер молчит, а клиент наигрывается вволю сам с собой и заканчивает игру и только после этого отвисает сервер и начинается прорисовка игры.
0
|
|
22.03.2011, 20:27 | |
Пин-понг ИГра Пин Понг Подскажите исправить ошибки в игре Пин понг на JavaScript
|
|
1 / 1 / 1
Регистрация: 27.11.2010
Сообщений: 8
|
|
24.03.2011, 15:00 [ТС] | 2 |
вообщем сам написал, сам разобрался, сам себе ответил....вдруг кому понадобиться рабочая уже.
Код
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Design; using System.Text; using System.Threading; using System.Net; using System.Net.Sockets; using System.Windows.Forms; namespace TennisDotNetSocket { public partial class Form1 : Form { public static int Player1 = 20, Player2 = 20; public int ID = 0; public bool Fx = true; public bool Fy = true; public int BallX = 20, BallY = 50; public bool GameStartEnd = true; public bool ConnnetStart = true; public const int RocketX = 15; public const int RocketY = 45; public const int RadiusBall = 10; public const int BallDx = 2; public const int BallDy = 2; static Thread Th; static bool IsServer; public static bool FlagStart = false; public static string IP = null, port = null; public Form1() { Form2 re = new Form2(); re.ShowDialog(); IsServer = (MessageBox.Show("сервер?", "", MessageBoxButtons.YesNo) == DialogResult.Yes); InitializeComponent(); if (IsServer) { ID = 1; toolStripTextBox1.Text = "Server"; Th = new Thread(new ThreadStart(ServerThread)); } else { ID = 2; toolStripTextBox1.Text = "Client"; Th = new Thread(new ThreadStart(ClientThread)); } } public static void ServerThread() { //Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //sock.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 57000)); Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sock.Bind(new IPEndPoint(IPAddress.Parse(IP),Convert.ToInt32(port))); sock.Listen(1); Socket client = sock.Accept(); Byte[] data = new Byte[4]; Byte[] outPl = new Byte[4]; FlagStart = true; try { while (true) { outPl[0] = Convert.ToByte(Player1); client.Send(outPl); client.Receive(data); Player2 = Convert.ToInt16(data[0]); client.SendTimeout = 5; } } catch (Exception ex) { client.Shutdown(SocketShutdown.Both); client.Close(); FlagStart = false; MessageBox.Show(ex.Message + "\n\n"+ ex.InnerException+ "\n\n"+ ex.Source + "\n\n"+ ex.StackTrace + "\n\n", "Server error", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); } } public static void ClientThread() { //Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //sock.Connect("127.0.0.1", 57000); Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sock.Connect(IP, Convert.ToInt32(port)); if (sock.Connected) { FlagStart = true; try { Byte[] data2 = new Byte[4]; Byte[] outPl2 = new Byte[4]; while (true) { sock.SendTimeout = 5; sock.Receive(data2); Player1 = Convert.ToInt16(data2[0]); outPl2[0] = Convert.ToByte(Player2); sock.Send(outPl2); } } catch(Exception ex) { sock.Shutdown(SocketShutdown.Both); sock.Close(); FlagStart = false; MessageBox.Show(ex.Message + "\n\n" + ex.InnerException + "\n\n" + ex.Source + "\n\n" + ex.StackTrace + "\n\n", "Client error", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); } } else { MessageBox.Show("Невозможно подключиться!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); } } private void panel1_MouseMove(object sender, MouseEventArgs e) { switch (ID) { case 0: { Player1 = e.Y; Player2 = e.Y; break; } case 1: { Player1 = e.Y; break; } case 2: { Player2 = e.Y; break; } } } private void panel1_Paint(object sender, PaintEventArgs e) { Graphics gr = e.Graphics; SolidBrush black = new SolidBrush(Color.Black); SolidBrush red = new SolidBrush(Color.Red); // убираем ракетки gr.FillRectangle(black, 0, 0, RocketX, panel1.Height); gr.FillRectangle(black, panel1.Width - RocketX, 0, RocketX, panel1.Height); // рисуем новые ракетки gr.FillRectangle(red, 0, Player1, RocketX, RocketY); gr.FillRectangle(red, panel1.Width - RocketX, Player2, RocketX, RocketY); // убираем шарик gr.FillRectangle(black, RocketX, 0, panel1.Width - 2 * RocketX, panel1.Height); // рисуем новый шарик gr.FillEllipse(red, BallX, BallY, RadiusBall, RadiusBall); } public void timer1_Tick(object sender, EventArgs e) { #region // Если конец игры try { if (FlagStart) { if (((BallX - RadiusBall) <= 0) || ((BallX + RadiusBall) >= panel1.Width)) { GameStartEnd = false; timer1.Stop(); if (ID == 0) MessageBox.Show("Как бэ конец...и проиграли, и победили..."); if (BallX - RadiusBall < RocketX) { if (ID == 1) MessageBox.Show("Вы проиграли"); if (ID == 2) MessageBox.Show("Ура! Вы победили!"); } if (BallX + RadiusBall > panel1.Width - RocketX) { if (ID == 2) MessageBox.Show("Вы проиграли"); if (ID == 1) MessageBox.Show("Ура! Вы победили!"); } } #endregion #region Если продолжаем играть if (GameStartEnd != false) { // попадание в ракетку игрока 1 if (((BallY - RadiusBall) <= Player1 + RocketY) && ((BallY + RadiusBall) >= Player1)) { if ((BallX - RadiusBall) <= RocketX) Fx = true; } // попадание в ракетку игрока 2 if (((BallY - RadiusBall) <= Player2 + RocketY) && ((BallY + RadiusBall) >= Player2)) { if ((BallX + RadiusBall) >= (panel1.Width - RocketX)) Fx = false; } // попадание вверхнюю границу if ((BallY - RadiusBall >= 0) && (BallY - RadiusBall < 2)) Fy = true; // попадание нижнюю границу if ((BallY + RadiusBall > panel1.Height - 2) && (BallY + RadiusBall <= panel1.Height)) Fy = false; // перераспределение координат для шарика if (Fx == true) BallX += BallDx; else BallX -= BallDx; if (Fy == true) BallY += BallDy; else BallY -= BallDy; toolStripTextBox2.Text = BallX + ":" + BallY; panel1.Refresh(); } #endregion } } catch (Exception ex) { MessageBox.Show(ex.Message + "\n\n" + ex.InnerException + "\n\n" + ex.Source + "\n\n" + ex.StackTrace + "\n\n", "Client error", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); } } private void подключитьсяToolStripMenuItem_Click(object sender, EventArgs e) { Th.Start(); подключитьсяToolStripMenuItem.Enabled = false; } } } Код
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace TennisDotNetSocket { public partial class Form2 : Form { public string IPs = null, ports = null; public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { IPs = textBox1.Text; ports = textBox2.Text; Form1.IP = IPs; Form1.port = ports; button1.Enabled = false; button1.Text = "Сохранено"; button2.Visible = true; } private void button2_Click(object sender, EventArgs e) { Close(); } } }
0
|
0 / 0 / 0
Регистрация: 22.11.2016
Сообщений: 1
|
|
22.11.2016, 16:26 | 3 |
А как к самому себе подключиться? Как запустить с одного компьютера? Запускаю программу, далее появляется окошко, в нём прописаны IP и порт, нажимаю ОК, затем Играть, далее появляется окошко с выбором сервер ты или клиент, далее появляется окно с самой игрой, но в нём игра не начинается, нужно ещё подключиться другому игроку, с другой стороны, но как это сделать с одной машины? Что не прописываю ничего не подходит..
0
|
22.11.2016, 16:26 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь. Ошибка при передаче данных в клиент-серверном приложении Клиент-сервер: При передаче одного кадра все хорошо, но при отсылке потоком возникает ряд ошибок Расшифровать данные Wireshark. Ошибка при передаче файла на сервер Взаимодействие WinCC с Labview 2013, как сервер-клиент, так и клиент-сервер Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
Тематические курсы и обучение профессиям онлайн Профессия С#-разработчик (Skillbox) Архитектор ПО (Skillbox) Профессия Тестировщик (Skillbox) |