Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 6
.NET 4.x

Асинхронный TCP сервер-клиент: не выходит считать поток

04.06.2016, 20:35. Показов 1996. Ответов 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
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
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;
 
namespace WolfChat
{
    public partial class MainForm : Form
    {
        TcpClient client;
        TcpListener listener;
        CancellationTokenSource cts;
        char status;
        public MainForm()
        {
            InitializeComponent();
        }
 
        #region User input
        //Кнопка старта сервера
        public void BeginServer(object sender, EventArgs e)
        {
            AsyncTcpServer();
        }
        
         //Кнопка старта клиента
        public void BeginClient(object sender, EventArgs e)
        {
            AsyncTcpClient();
        }
 
        //Кнопка отправки сообщения
        public void SendMessage(object sender, EventArgs e)
        {
            StreamWriter writer = new StreamWriter(client.GetStream());
            writer.WriteLine(Message.Text);
        }
        #endregion
        async void AsyncTcpServer()
        {
            IPAddress ip=IPAddress.Parse("127.0.0.1");
            listener=new TcpListener(ip,10001);
            listener.Start();
            while(true){
                client = await listener.AcceptTcpClientAsync();
                Indicator.Text = "Client Connected";
                ServerListener();
            }
        }
 
        async void ServerListener()
        {
            NetworkStream clientStream = client.GetStream();
            StreamReader reader = new StreamReader(clientStream);
            Indicator.Text = "Waiting to client message";
            while(true){
                    Indicator.Text = reader.ReadLineAsync();
            }
        }
 
        async void AsyncTcpClient()
        {
            IPAddress ip = IPAddress.Parse("127.0.0.1");
            client = new TcpClient();
            await client.ConnectAsync(ip,10001);
            Indicator.Text = "Client Connected";
        }
    }
}
Алгоритм такой: ждем, пока клиент подключится и начинаем ждать, что запишет в поток. Вот с считыванием из потока я и пролетал. Если начать просто считывать через ReadLineAsync то ничего не происходит при записи через WriteLineAsync. Вообще ничего. Работаю в VisualStudio.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.06.2016, 20:35
Ответы с готовыми решениями:

Клиент-сервер: Если запустить первый поток то он работает, при запуске второго потока выходит ошибка
Здравствуйте, пытаюсь разбить код на два потока. 1) Поток прием клиентов. void login_server() { struct sockaddr_in saddr; ...

TCP-сервер и TCP-клиент. Клиент не находит файл.
Всем привет! Решил изучать передачу данных по сети и начал с освоения примера, приведённого в книге "Visual C# 2008. Базовый курс...

Асинхронный или синхронный клиент TCP в приведенных примерах
Здравствуйте, подскажите пожалуйста это код синхронного или асинхронного клиента и сервера Клиент: using System; using...

2
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
04.06.2016, 21:11
Цитата Сообщение от Griiis Посмотреть сообщение
пишу приложение клиент-сервер
Griiis, может стОит посмотреть в сторону более высокоуровневой модели (WCF)?
0
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 6
05.06.2016, 17:39  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Griiis, может стОит посмотреть в сторону более высокоуровневой модели (WCF)?
Честно сказать, мне нужно решение именно этой задачи. WCF это замечательно, но к сожалению нет.

Добавлено через 20 часов 4 минуты
Нашел решение. Собственно, проблема была в отсутствии writer.AutoFlush = true; Flush фактически генерирует именно саму запись, до этого пишется всё в буфер.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.06.2016, 17:39
Помогаю со студенческими работами здесь

Если сервер TCP то и клиент тоже должен быть TCP?
Я полный новичок И я так понимаю есть TCP client (Sockets), TCP server (Sockets), и ClientSocket (ScktComp), ServerSocket (ScktComp) ...

как создать TCP клиент, TCP сервер ? На С++
Очень нужна помощь!Как написать TCP клиент, TCP сервер. Например,клиент вводит строку с клавиатуры и отсылает ее серверу.только перед...

Асинхронный клиент сервер
Здравствуйте, как сделать асинхронный клийент сервер? что бы сервер мог одновременно всем клиентам отправлять данные (для игры)

Асинхронный клиент-сервер
Здравствуйте. Вот уже 3 дня бьюсь над проблемой, решение которой не могу найти. Вообщем, коротко говоря, имеется серверное приложение,...

Асинхронный сервер и клиент Boost Asio
Здравствуйте. Попробовал написать нечто такое. Но на этом этапе чтения не происходит ничего. Дальше std::cout<<"Server: I...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru