Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 06.04.2024
Сообщений: 16

Сетевое программирование. Network programming

23.10.2024, 01:28. Показов 651. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
using System.Net;
using System.Net.Sockets;
using NetWorking;
using SimpleFTP;
using System.Text;
 
namespace SimpleFTP.Tests;
 
public class Tests
{
    /*[Test]
    public async Task GetResponseForClient()
    {
        var checker = "2 ./Files/1t.txt false .Files/2t.txt true\n";
        const int port = 8888;
        Console.WriteLine("h");
        var server = new Server(IPAddress.Any, port);
        Console.WriteLine("w");
        var client = new TcpClient("localhost", port);
        var stream = client.GetStream();
        var writer = new StreamWriter(stream);
        await writer.WriteLineAsync("1 ./Files\n");
        await writer.FlushAsync();
        var reader = new StreamReader(stream);
        var responseClient = await reader.ReadToEndAsync();
        Assert.That(responseClient, Is.EqualTo(checker));
    }*/
 
    [Test]
public async Task GetResponseForClient1()
{
    var checker = "1 ./Files\n"; 
    const int port = 8890;
 
    var server = new TcpListener(IPAddress.Any, port);
    server.Start(); 
    var socket = await server.AcceptSocketAsync(); 
 
    var client = new TcpClient("localhost", port);
    var streamclient = client.GetStream();
    var writer = new StreamWriter(streamclient);
    await writer.WriteLineAsync("1 ./Files\n");
    await writer.FlushAsync();
 
    var stream = new NetworkStream(socket);
    var reader = new StreamReader(stream);
 
    var buffer = new byte[1024];
    int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
    string message = Encoding.UTF8.GetString(buffer, 0, bytesRead);
 
    Assert.That(message, Is.EqualTo(checker));
   
    /*if (message == "1 ./Files\n") 
    {
        await writer.WriteLineAsync("1 ./Files\n");
        await writer.FlushAsync();
    }
 
    // Читаем ответ от сервера
    var response = await reader.ReadToEndAsync();
    Assert.That(response, Is.EqualTo(checker));
 
    
    writer.Close();
    reader.Close();
    streamclient.Close();
    stream.Close();
    socket.Close();
    client.Close();
    server.Stop(); */
}
 
    }
Почему не запускаются тесты? Точнее, тесты запускаются, но не проходят, терминал не отключается. первый тест изолировал, но если его открыть то будет аналогичная ситуация. Также, если продолжить второй тест.
Есть ещё одна проблема. После запуска каждого теста и при запуске последующего появляется исключение использования занятого Ip-адреса. Как я понял, я хоть и закрываю термианл, запущенные ранее тесты не перестают работать, просто при каждом запуске нужно новый адрес писать, чего не хочется делать.
Будьте добры, подскажите
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.10.2024, 01:28
Ответы с готовыми решениями:

Сетевое программирование
Начал изучать работу с сетью, возникла не большая проблема. Не знаю как реализовать передачу имени от клиента на сервер(т.е перед...

Сетевое программирование
Добрый день) Передо мной стоит следующая задача: Необходимо написать сетевую игру, но игроки должны не сами прописывать IP друг друга,...

C# и низкоуровневое сетевое программирование
Здравствуйте, мне надо отослать TCP пакет с IP адресом, отличным от настоящего. Узнал, что это можно сделать благодаря WinPcap(для шарпа...

4
 Аватар для Andrey-MSK
3349 / 2235 / 388
Регистрация: 14.08.2018
Сообщений: 7,557
Записей в блоге: 4
23.10.2024, 08:24
Лучший ответ Сообщение было отмечено Nemmus как решение

Решение

Цитата Сообщение от Nemmus Посмотреть сообщение
После запуска каждого теста и при запуске последующего появляется исключение использования занятого Ip-адреса.
А кто будет закрывать объекты TcpListener(), TcpClient(), StreamWriter() и т.д?
Посмотрите документацию, если объект поддерживает IDisposable, то использовать его нужно через using. Если нет, то явно закрывать его методами, при их наличии.
0
0 / 0 / 0
Регистрация: 06.04.2024
Сообщений: 16
23.10.2024, 10:45  [ТС]
Спасибо за ответ, но здесь главный мой вопрос, почему тесты не проходят. Могли бы вы на него ответить?

Добавлено через 3 минуты
Вопрос по использованию Ip-адресов отпадает. теперь только один вопрос - почему не проходят тесты?
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3429 / 2748 / 575
Регистрация: 04.09.2018
Сообщений: 8,624
Записей в блоге: 3
23.10.2024, 12:23
Цитата Сообщение от Nemmus Посмотреть сообщение
теперь только один вопрос - почему не проходят тесты?
и ответ только один: потому что результат не соответствует ожиданиям.
Согласно checker ожидается "1 ./Files\n", а есть ли перенос строки в конце у самого message? А может он вообще задом на перед? И что вообще в нем находится? Для этого есть точки останова, в которых можно это посмотреть.
Никто другой этого не скажет.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
23.10.2024, 13:28
1. У вас сначала запускается ожидание подлключения состороны серверного Listener, а только потом создается клиент. Т.е. код не достижим априори. По сути из-за этого тест и не отрабатывает.
2. Пинайте конект явно, а не через конструктор.
3. Пинайте using. По заверешению всех тестов может и прибьется, но в рамках одного -- нет
4. Используете ReadLine, раз уже пляшете от строк. Как минимум вы отправляет сообщение через WriteLine, а значит в конец дополнительно запишет перенос, который вы не учитываете в финальной проверке. Метод Read нужно воспринимать так, что может прийти по одному байту.
5. Сообщение, адресс и порт должны быть объявленны в едином экземпляре в виде констант, а не дублироваться по надцать раз.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const string checker = "Nya-ha-ha-ha!!!";
const int port = 12345;
var ip = IPAddress.Loopback;
 
using var server = new TcpListener(ip, port);
server.Start();
 
 
using var client = new TcpClient();
await client.ConnectAsync(ip, port);
 
using var serverClient = await server.AcceptTcpClientAsync();
 
using var streamClient = client.GetStream();
using var writer = new StreamWriter(streamClient);
await writer.WriteLineAsync(checker);
await writer.FlushAsync();
 
using var streamServerClient = serverClient.GetStream();
using var reader = new StreamReader(streamServerClient);
var message = await reader.ReadLineAsync();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.10.2024, 13:28
Помогаю со студенческими работами здесь

Сетевое программирование для начинающих
Доброго времени суток форумчане. Столкнулся с проблемой поиска литературы по сетевому программированию под .Net. Хотелось бы разобраться...

Сетевое программирование. Передача больших массивов данных
Здравствуйте! Занимаюсь разработкой одного проекта. На входе есть клиент и сервер. Клиент подключается к серверу, отправляет request,...

Сетевое программирование
вопрос в общем такой, есть консольный не сложный чат на UDP, но для отправки сообщений, все равно необходимо знать айпи... как сделать...

Сетевое программирование, STUN
Здравствуйте, не нашел подходящего раздела для моего вопроса, поэтому решил написать в разделе языка, на котором учусь писать. У меня с...

Реализовать приглашение пользователя в друзья (сетевое программирование)
Привет! Подскажите, как реализовать приглашение в друзья? Чтобы клиент мог слать другим клиентам приглашение, а они могли соглашаться или...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru