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

Создание простого UDP сервера

25.01.2018, 16:43. Показов 1790. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
Возникла такая проблема.
Нужно сделать на первых порах простой UDP сервер, но так, чтобы:
1. В основном потоке сервер обрабатывает ввод с клавиатуры команды администратора сервера и обрабатывает их соответствующим образом, например администратор вводит команду /server on, полученная строка разбивается на 2 фрагмента, анализируется сначала первое ключевое слово, за тем второе.
Первое относится к командам сервера, второе на его включение.
Если сравнение обоих фрагментов с имеющимися заготовками команд проходит нормально, выдаём на консоль сообщение о том, что сервер запущен.
Ну и на пример вторую команду /server off
то же самое, только на отключение.
2. Сервер при запуске открывал какой-нибудь порт, например 8888
3. При получении данных от клиента добавлял его в список клиентов.
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
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
using System;
using System.Text;
using System.Threading;
using System.Xml;
using System.Net;
using System.Net.Sockets;
using System.Collections.Generic;
 
namespace GameServer
{
public class Program
{
static Server server = new Server(); // сервер
static Thread listenThread; // поток для прослушивания
 
static void Main(string[] args)
{
try
{
server = new Server();
listenThread = new Thread(new ThreadStart(server.Listen));
listenThread.Start(); //старт потока
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
 
public class Server
{
UdpClient client = new UdpClient();
List<Client> clients = new List<Client>(); // все подключения
 
protected void AddConnection(Client newClient)
{
clients.Add(newClient);
}
 
/*
protected void RemoveConnection(string id)
{
// получаем по id закрытое подключение
Client client = clients.FirstOrDefault(c => c.Id == id);
// и удаляем его из списка подключений
if(client != null)
{
clients.Remove(client);
}
}
*/
 
public  void Listen()
{
UdpClient receiver = new UdpClient();
IPEndPoint remoteIp = null; // адрес входящего подключения
try
{
while(true)
{
byte[] data = receiver.Receive(ref remoteIp); // получаем данные
string message = Encoding.Unicode.GetString(data);
Client client = new Client();
AddConnection(client);
Console.WriteLine("Собеседник: {0}", message);
}
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
receiver.Close();
}
}
}
 
public class Client
{
string remoteAddress;
int remotePort;
 
private void SendMessage()
{
UdpClient sender = new UdpClient(); // создаем UdpClient для отправки сообщений
try
{
while(true)
{
string message = Console.ReadLine(); // сообщение для отправки
byte[] data = Encoding.Unicode.GetBytes(message);
sender.Send(data, data.Length, remoteAddress, remotePort); // отправка
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
sender.Close();
}
}
 
private void ReceiveMessage()
{
UdpClient receiver = new UdpClient();
IPEndPoint remoteIp = null; // адрес входящего подключения
try
{
while(true)
{
byte[] data = receiver.Receive(ref remoteIp); // получаем данные
string message = Encoding.Unicode.GetString(data);
Console.WriteLine("Собеседник: {0}", message);
}
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
receiver.Close();
}
}
}
}
Если кому несложно, помогите пожалуйста изменить и допилить этот код, или подскажите пожалуйста, где можно посмотреть подобное, что описал выше?
Надеюсь понятно удалось объяснить задачу.
Если кратко, то я хотел сделать так, чтобы сервер:
1. Обрабатывал спец команды администратора.
2. при получении данных от клиентов добавлял их в список
3. Мог делать рассылку данных всем клиентам из списка.
Заранее огромное спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.01.2018, 16:43
Ответы с готовыми решениями:

Создание TCP/UDP сервера
Добрый день, вечер, или другое время суток заставшее вас. Пытаюсь написать клиент-серверное...

Клиент для UDP сервера!
Есть вот такой сервер: using System; using System.Collections.Generic; using System.Linq;...

Простейшие коды клиент-сервера UDP
Собственно, вопрос избитый уверен. Помогите, плиз, разобраться. Пишу контрольную. Простейшие коды...

UDP клиент за NAT (с использованием STUN сервера)
Следующий код запускается за Nat-ом: using LumiSoft.Net.STUN.Client; using System; using...

0
25.01.2018, 16:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.01.2018, 16:43
Помогаю со студенческими работами здесь

Создание простого класса
Приветствую Вас, программисты! Решите мне, пожалуйста, одну задачку на простые классы. Сейчас...

Создание простого MDI приложения
здравствуйте!Вопрос по C#. Никак не могу сделать простое MDI приложение. Есть две формы: Form1 и...

Создание простого конструктора теста
Как сделать чтобы работали кнопки. Как сделать вкладку, на подобии вкладок браузера чтобы,...

Создание сервера
Здравствуйте. Помогите пожалуйста понять на правильном ли я пути и что именно требуется от меня...


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

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