Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 17.12.2016
Сообщений: 3
1

Лишняя цифра при передаче информации по сети

31.01.2017, 20:41. Показов 1342. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Собственно, есть сервер и клиент.Сервер принимает координаты кнопки, которые отправляет клиент и отсылает второму клиенту, у которого меняется положение второй кнопки.
Собственно на сервер все приходит отлично, точные координаты. Клиент же принимает обратно все нормально, но лишь при условии, что цифр координат будет 3. Если будет 2 цифры координат, то он сзади добавляет последнюю цифру из предыдущего сообщения.Подскажите, что сделать?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 while (true)
                {
                    message = GetMessage();
                    try
                    {
                        if (oldmsg != message)
                        {
                            
                            //message = String.Format("{0}: {1}", userName, message);
                            Console.WriteLine(message);
                            server.BroadcastMessage(message, this.Id);
                            
                        }
                        oldmsg = message;
                    }
                    catch
                    {
                        message = String.Format("{0}: покинул чат", userName);
                        Console.WriteLine(message);
                        server.BroadcastMessage(message, this.Id);
                        break;
                    }
                }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private string GetMessage()
        {
            byte[] data = new byte[1024]; // буфер для получаемых данных
            StringBuilder builder = new StringBuilder();
            int bytes = 0;
            do
            {
                bytes = Stream.Read(data, 0, data.Length);
                builder.Append(Encoding.UTF8.GetString(data, 0, bytes));
            }
            while (Stream.DataAvailable);
 
            return builder.ToString();
        }
код выше - сервера
теперь клиент
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
public partial class Form1 : Form
    {
        static int x;
        Socket client = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
        byte[] bufferReceive = new byte[1024];
        byte[] bufferSend = new byte[1024];
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                Connect();        
            }
            catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); }
        }
 
        private void ReceiveCallback(IAsyncResult ar)
        {
            string message = "0"; ;
           int received =  client.EndReceive(ar);
             if (received == 0)
                {
                 return;
                }
          
               message = Encoding.UTF8.GetString(bufferReceive);
          
         
            Invoke((Action)delegate
            {
                label1.Text =  message;
              
                if (message != "0" && message != null )
                {
                    Rocket2.Location = new Point(Convert.ToInt32(message), Rocket2.Location.Y);
                }
            });
            client.BeginReceive(bufferReceive, 0, bufferReceive.Length, SocketFlags.None,ReceiveCallback, null);
        }
        private void Connect()
        {
            
            
            client.Connect("", );
           
            client.BeginReceive(bufferReceive, 0, bufferReceive.Length, SocketFlags.None, ReceiveCallback, null);
            timer1.Enabled = true;
 
           
           
        }
 
        private void SendCallback(IAsyncResult ar)
        {
            
        }
       
        private string ReceiveMsg(string msg)
        {
            byte[] buffer = new byte[1024];
            client.Receive(buffer);
            msg = Encoding.UTF8.GetString(buffer);
            return msg;  
        }
        private byte[] SendMsg(string msg)
        {
            bufferSend = Encoding.UTF8.GetBytes(msg);
            return bufferSend;
        }
 
        private void panel2_MouseMove(object sender, MouseEventArgs e)
        {
           
            if (client.Connected)
            {
                x =Cursor.Position.X - this.Location.X - 15;
                Rocket1.Location = new Point(x, Rocket1.Location.Y);     
               
                
            }
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            string oldx = "";
 
            client.BeginSend(SendMsg(x.ToString()), 0, bufferSend.Length, 0, SendCallback, client);
                oldx = x.ToString();
           
           
            
        }
    }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.01.2017, 20:41
Ответы с готовыми решениями:

Почему нужно кодировать и декодировать данные при передаче по сети
Socket handler = sListener.Accept(); string data = null; // Мы дождались клиента, пытающегося...

При передаче по сети и электронной почте теряется резкость картин
Всем доброго времени суток! очень прошу помочь.. ситуация следующая: имеем 15 копмьютеров в...

Ошибка "CSRF token missing or incorrect" при передаче информации в форме
Вообщем создал я модели(не суть важно какие). Через админку добавил группу пользователей и...

При передаче данных по локальной сети на сервер в базу sql передается только часть данных
Всем доброго времени суток! У меня ситуация такая – есть своя программа на Delphi 2010 для...

4
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,340
Записей в блоге: 1
31.01.2017, 20:58 2
Diiiiimas, видимо это происходит потому что код клиента преобразует в строку весь буфер, а не только полученные байты. Это строки №30 и 66.
0
0 / 0 / 0
Регистрация: 17.12.2016
Сообщений: 3
31.01.2017, 21:06  [ТС] 3
OwenGlendower, на 66 строку можно не обращать внимания в принципе,а вот с 30 может быть да. Спасибо, а не могли бы подсказать, как правильно считать, чтобы такого не было ?
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,340
Записей в блоге: 1
31.01.2017, 21:07 4
Лучший ответ Сообщение было отмечено Diiiiimas как решение

Решение

Diiiiimas,
C#
1
message = Encoding.UTF8.GetString(bufferReceive, 0, received);
1
0 / 0 / 0
Регистрация: 17.12.2016
Сообщений: 3
31.01.2017, 21:10  [ТС] 5
OwenGlendower, Большое вам спасибо!
0
31.01.2017, 21:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.01.2017, 21:10
Помогаю со студенческими работами здесь

Нужно найти информацию по теме "Восстановление файлов, поврежденных при передаче по сети"
Собственно сабж, задали курсач на тему "Восстановление файлов, которые повредились при передаче по...

Подскажите книгу о передаче информации
Нужна книга, где объясняются такие понятия, как расстояние Хемминга, границы Хемминга и...

Реализовать квадрат внутри которого изначально вписана цифра 0, при клике цифра в нем увеличивается на один.
5 квадратов внутри каждого из которых изначально вписана цифра 0, при клике на любой квадрат цифра...

Не мог понять в чем ошибка в передаче данных по локальной сети
Реализовал программу для передачи сообщений по локальной сети(Интерфейс на скр.1(прикрепил к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru