Форум программистов, компьютерный форум, киберфорум
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. Показов 1906. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru