Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/16: Рейтинг темы: голосов - 16, средняя оценка - 5.00
1 / 1 / 1
Регистрация: 21.05.2010
Сообщений: 11

клиент-серверное приложение

15.11.2010, 23:37. Показов 3208. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
собственно проблема заключается в том, что при запуске клиента, и нажатии на кнопку (отправление сообщения серверу) клиент зависает..причина мне не известна( при пошаговом запуске f11, сервер отправляет ответ клиенту, все работает
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.11.2010, 23:37
Ответы с готовыми решениями:

Клиент-серверное приложение: как определить, что сервер/клиент не отвечает в течении определенного времени
Пишу клиент-серверное приложение. Использую TCPListener и TCPClient. Вопрос: как определить что сервер(клиент) не отвечает в течении...

Клиент-серверное приложение
Заинтересовался написанием клиент-серверных приложений, с чего начать? что написать? есть ли какая-либо литература (желательно электронная)...

Клиент-серверное приложение
Клиент-серверное приложение между процессов с помощью именованых каналов Здравствуйте. Тут ахтунг, короч. Не то, чтобы я гуру в этом...

2
 Аватар для tasty_sock
139 / 137 / 21
Регистрация: 26.01.2010
Сообщений: 350
16.11.2010, 00:23
Телепатов нету, код в студию.
0
1 / 1 / 1
Регистрация: 21.05.2010
Сообщений: 11
16.11.2010, 23:02  [ТС]
Лучший ответ Сообщение было отмечено Lord Demos как решение

Решение

клиент
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO;
using System.Net.Sockets;
using System.Data.OleDb;
 
namespace Client
{
    public partial class Form1 : Form
    {
        private NetworkStream output;
        private BinaryReader reader;
        private BinaryWriter writer;
        // сообщение от сервера
        private string message = "";
        private Thread readThread;
        // сообщение серверу
        private string stringSend;
        // строка для добавления данных в таблицу
        string stringToBase;
        // температура выпечки текстолита
        private double temperature;
        // количество полученных досок
        private int number;
        // остаток массы
        private double rests;
        // строка, используемая для разбиения сообщения от сервера и записи данных в таблицу
        private string[] stroka;
 
        public Form1()
        {
            InitializeComponent();
            //readThread = new Thread(new ThreadStart(RunClient));
            //readThread.Start();
        }
        public void RunClient()
        {
            TcpClient client;
            
            try
            {
                toolStripStatusLabel1.Text = "Ожидание подключения...";
                client = new TcpClient();
                client.Connect("localhost", 5000);
                output = client.GetStream();
                writer = new BinaryWriter(output);
                reader = new BinaryReader(output);
                toolStripStatusLabel1.Text = "Сервер подключен...";
                writer.Write(stringSend);
 
                try
                {
                    message = reader.ReadString();
                    label6.Text = message;
                    button3.Enabled = true;
 
                    OleDbConnection conClient = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + @"clientPrice.mdb");
                    conClient.Open();
                    OleDbCommand deleteCommand = new OleDbCommand("DELETE * FROM clientTable", conClient);
                    deleteCommand.ExecuteNonQuery();
                    stroka = message.Split(' ');
                    temperature = Convert.ToDouble(stroka[2]);
                    number = Convert.ToInt32(stroka[9]);
                    rests = Convert.ToDouble(stroka[12]);
                    OleDbCommand insertCommand = new OleDbCommand("INSERT INTO clientTable VALUES (" + "'" + stringToBase + "','" + temperature + "','" + number + "','" + rests + "'" + ")", conClient);
                    insertCommand.ExecuteNonQuery();
                    conClient.Close();
                }
                catch (Exception)
                {
                    System.Environment.Exit(System.Environment.ExitCode);
                }
 
                writer.Close();
                reader.Close();
                output.Close();
                client.Close();
            }
            catch (Exception error)
            {
                MessageBox.Show(error.ToString());
            }
             
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            System.Environment.Exit(System.Environment.ExitCode);
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            label5.Visible = true;
            if(radioButton1.Checked == true)
            {
                try
                {
                    label5.Text = "Марка продукции: " + comboBox1.SelectedItem.ToString() + "-1-" + numericUpDown1.Value.ToString() + "-" + numericUpDown2.Value.ToString() + ".\nВес продукции: " + numericUpDown3.Value.ToString() + " кг";
                    stringSend = comboBox1.SelectedItem.ToString() + "-1-" + numericUpDown1.Value.ToString() + "-" + numericUpDown2.Value.ToString() + ".\nВес продукции: " + numericUpDown3.Value.ToString() + " кг.";
                    stringToBase = comboBox1.SelectedItem.ToString() + "-1-" + numericUpDown1.Value.ToString() + "-" + numericUpDown2.Value.ToString() + ". " + numericUpDown3.Value.ToString() + " кг.";
                    button2.Enabled = true;
                }
                catch
                {
                    label5.Text = "Вы не заполнили все поля!";
                }
            }
            if (radioButton2.Checked == true)
            {
                try
                {
                    label5.Text = "Марка продукции: " + comboBox1.SelectedItem.ToString() + "-2-" + numericUpDown1.Value.ToString() + "-" + numericUpDown2.Value.ToString() + ".\nВес продукции: " + numericUpDown3.Value.ToString() + " кг";
                    stringSend = comboBox1.SelectedItem.ToString() + "-2-" + numericUpDown1.Value.ToString() + "-" + numericUpDown2.Value.ToString() + ".\nВес продукции: " + numericUpDown3.Value.ToString() + " кг.";
                    stringToBase = comboBox1.SelectedItem.ToString() + "-1-" + numericUpDown1.Value.ToString() + "-" + numericUpDown2.Value.ToString() + ". " + numericUpDown3.Value.ToString() + " кг.";
                    button2.Enabled = true;
                }
                catch
                {
                    label5.Text = "Вы не заполнили все поля!";
                }
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            /*
            label1.BackColor = System.Drawing.Color.Transparent;
            label2.BackColor = System.Drawing.Color.Transparent;
            label3.BackColor = System.Drawing.Color.Transparent;
            label4.BackColor = System.Drawing.Color.Transparent;
            label5.BackColor = System.Drawing.Color.Transparent;
            label6.BackColor = System.Drawing.Color.Transparent;
            radioButton1.BackColor = System.Drawing.Color.Transparent;
            radioButton2.BackColor = System.Drawing.Color.Transparent;
            */
            radioButton1.Checked = true;
            button2.Enabled = false;
            button3.Enabled = false;
            label5.Visible = false;
            label6.Visible = true;
            TcpClient client;
            try
            {
                client = new TcpClient();
                client.Connect("localhost", 5000);
                toolStripStatusLabel1.Text = "Сервер подключен...";
            }
            catch
            {
                toolStripStatusLabel1.Text = "Ожидание подключения...";
            }
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            label6.Visible = true;
            try
            {
                RunClient();
            }
            catch { }
        }
 
        private void numericUpDown1_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }
 
        private void numericUpDown2_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }
 
        private void numericUpDown3_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar))
                e.Handled = true;
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            crystalForm crystalForm = new crystalForm();
            crystalForm.ShowDialog();
        }
    }
}
сервер
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.IO;
using System.Threading;
using System.Net;
using System.Data.OleDb;
 
namespace Server
{
    public partial class Form1 : Form
    {
        public OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + @"serverInfo.mdb");
        public DataTable tempTable;
        public OleDbDataAdapter dataAdapter;
        private Socket connection;
        // readThread принимает от клиентов запросы на соединение
        private Thread readThread;
        private BinaryWriter writer;
        private BinaryReader reader;
        private NetworkStream socketStream;
        IPEndPoint clientEndPoint;
        public string ipAddress = "";
        public Form1()
        {
            InitializeComponent();
            readThread = new Thread(new ThreadStart(RunServer));
            readThread.Start();
        }
        // RunServer инициализирует сервер для получения запросов на соединение и их обработки
        public void RunServer()
        {
            // создание listener для прослушивания клиентского запроса на соединение
            TcpListener listener;
            int counter = 1;
            try
            {
                listener = new TcpListener(5000);
                // начало ожидания запросов
                listener.Start();
                while (true)
                {
                    toolStripStatusLabel1.Text = "Ожидание подключения...";
                    // вызов метода AcceptSocket, возвращающего при удачном соединении сокет
                    connection = listener.AcceptSocket();
                    socketStream = new NetworkStream(connection);
                    // создание экземпляров BinaryWriter и BinaryReader для считывания и записи данных
                    writer = new BinaryWriter(socketStream);
                    reader = new BinaryReader(socketStream);
                    toolStripStatusLabel1.Text = "Соединение установлено...";
                    // в переменной theReply будет храниться считываемая от клиента строка
                    string theReply = "";
                    do
                    {
                        try
                        {
                            // определение ip-адреса клиента, для вывода его на экран и последующей записи в базу данных
                            clientEndPoint = (IPEndPoint)connection.RemoteEndPoint;
                            // записываем ip-адрес в переменную ipAddress
                            ipAddress = clientEndPoint.Address.ToString();
 
                            theReply = reader.ReadString();
                            richTextBox2.Text += DateTime.Now.ToLongTimeString() + " запрос от клиента. IP-адрес: " + ipAddress + "\nМарка продукции: " + theReply + "\n\n";
                            writer.Write(countTemperature(theReply));
                        }
                        catch (Exception)
                        {
                            break;
                        }
                    }
                    while (connection.Connected);
                    writer.Close();
                    reader.Close();
                    socketStream.Close();
                    connection.Close();
                    ++counter;
                }
            }
            catch(Exception error)
            {
                MessageBox.Show(error.ToString());
            }
        }
        // добавление новой записи в таблицу generalTable
        public void addNewRecord(string ip, string type, string mass)
        {
            con.Open();
            string nextAfterMaxId = "";
            try
            {
                OleDbCommand maxId = new OleDbCommand("SELECT MAX([№ запроса]) FROM generalTable", con);
                OleDbDataReader readId = maxId.ExecuteReader();
                while (readId.Read())
                    nextAfterMaxId = Convert.ToString(int.Parse(readId[0].ToString()) + 1);
            }
            catch
            {
                nextAfterMaxId = "1";
            }
            OleDbCommand insertCommand = new OleDbCommand("INSERT INTO generalTable VALUES (" + "'" + nextAfterMaxId + "','" + ipAddress + "','" + DateTime.Now.ToString() + "','" + type + "','" + mass + "'" + ")", con);
            if(insertCommand.ExecuteNonQuery()==1)
                MessageBox.Show("Все прошло успешно.","Добавление",MessageBoxButtons.OK,MessageBoxIcon.Asterisk);
            con.Close();
        }
        public string countTemperature(string reply)
        {
            // разделение строки, полученной от клиента, на подстроки
            string[] parts = reply.Split('.');
            // полная формула текстолита
            string[] type = parts[0].Split('-');
            // выделение из строки массы текстолита
            string[] massa = parts[1].Split(' ');
            // требуемая масса
            int mass = Convert.ToInt32(massa[2]);
            // марка текстолита
            string mark = type[0];
            // количество слоев фольги
            int layer = Convert.ToInt32(type[1]);
            // толщина фольги
            int thickFoil = Convert.ToInt32(type[2]);
            // толщина доски
            double thickBoard = Convert.ToDouble(type[3]);
            // количество досок, счетчик количества пакетов, остаточная масса 
            int thickNum, count = 0, ostatok = 0;//
            // температура выпечки
            double temperature;
            addNewRecord(ipAddress, parts[0], massa[2]);
            if (mark == "СТФ")
            {
                if (thickBoard < 2.0)
                    thickNum = 11;
                else
                    if (thickBoard >= 2.0 && thickBoard < 3)
                        thickNum = 9;
                    else
                        thickNum = 7;
                double tempMass = Convert.ToDouble(mass);
                for (; ; )
                {
                    if (tempMass >= (thickNum * 0.35))
                    {
                        tempMass = tempMass - thickNum * 0.35;
                        count++;
                    }
                    else
                        break;
                }
                temperature = thickNum * thickBoard * 10 + 10;
                return "Температура выпечки: " + temperature.ToString() + " град.\nМасса 1й доски: 350" + " гр.\nКоличество досок: " + count.ToString() + " \nОстаток массы: " + Convert.ToString(Math.Round(tempMass, 2)) + " кг.";
            }
            else
            {
                if (thickBoard <= 1.5)
                    thickNum = 8;
                else
                    if (thickBoard == 2.0)
                        thickNum = 7;
                    else
                        thickNum = 6;
                double tempMass = Convert.ToDouble(mass);
                for (; ; )
                {
                    if (tempMass >= (thickNum * 0.35))
                    {
                        tempMass = tempMass - thickNum * 0.35;
                        count++;
                    }
                    else
                        break;
                }
                temperature = thickNum * thickBoard * 10 + 10;
                return "Температура выпечки: " + temperature.ToString() + " град.\nМасса 1й доски: 350 гр." + "\nКоличество досок: " + count.ToString() + " \nОстаток массы: " + Convert.ToString(Math.Round(tempMass, 2)) + " кг.";
            }
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            System.Environment.Exit(System.Environment.ExitCode);
        }
 
        private void открытьБазуДанныхToolStripMenuItem_Click(object sender, EventArgs e)
        {
            dataBase dataBase = new dataBase();
            dataBase.ShowDialog();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            menuStrip1.BackColor = System.Drawing.Color.AliceBlue;
        }
    }
}

я подумал, раз при пошаговом работает, может надо установить время ожидания клиента ответа от сервера?

Добавлено через 22 часа 34 минуты
продвинул проблему дальше - проверил в универе на машине - все работает, у друга на машине - все работает, не работает только у меня...кто может посоветовать, что делать? я уже винду несколько раз переставлял...и хр и 7, я просто не знаю что делать, если кто может, помогите пожалуйста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.11.2010, 23:02
Помогаю со студенческими работами здесь

Асинхронное клиент серверное приложение
Всем доброго времени суток, а так же спасибо всем кто загляну и не прошёл мимо. Сразу предупреждаю, вопросов от меня будет много, но все...

Закрывается клиент-серверное приложение
Здравствуйте, делаю что то типа клиен-сервера. Использую сокеты. При подключении с клиента на сервер (Виндовс Формс). Он иногда закрывается...

Как написать клиент-серверное приложение
Привет всем, хочу написать сервер.Пересмотрел кучу уроков и статей и т.д. ,но там нет подробного описания каждого класса и метода. Т.е. они...

Клиент-Серверное приложение, асинхронное программирование
Здравствуйте, это мой первый опыт в написании приложений такого плана, но я прочитал уже довольно много литературы, а вот ответа на...

Клиент-серверное приложение - проблемы с кодировкой
Всем добрый день. В общем есть одна игра,для нее я реализовал клиент,после того как я успешно вхожу в игру,я получаю пакеты чата с 0x03...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru