V minulosti jsme si vytvořili program, který se dokázal připojit na server a číst z něho data. Dnes si vytvoříme server.
Na našem příkladu si ukážeme server, kam se uživatel připojí, odešle zprávu a server mu ji vrátí. Pro otestování můžete použít program netcat, který jsme si dříve ukazovali.
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class Program
{
static void Main(string[] args)
{
// Definice portu, na kterém bude server naslouchat
int port = 4444;
// Vytvoření TcpListeneru
TcpListener server = null;
try
{
// Naslouchání na všech síťových rozhraních na daném portu
IPAddress localAddr = IPAddress.Any;
server = new TcpListener(localAddr, port);
// Start serveru
server.Start();
Console.WriteLine($"Listening on port {port}...");
// Čekání na připojení klienta
TcpClient client = server.AcceptTcpClient();
Console.WriteLine("Client connected!");
// Získání dat ze vstupního streamu klienta
NetworkStream stream = client.GetStream();
// Vytvoření proměnných pro uložení příchozích dat
byte[] data = new byte[256];
int bytes;
// Čtení dat ze streamu
while ((bytes = stream.Read(data, 0, data.Length)) != 0)
{
string responseData = Encoding.ASCII.GetString(data, 0, bytes); // Převod dat na řetězec
Console.WriteLine($"Received message: {responseData}"); // Vypsání výstupu do konzole serverz
// Odpověď na klienta
byte[] msg = Encoding.ASCII.GetBytes($"Server: message received: {responseData}"); // Převod stringu na formát pro odeslání
stream.Write(msg, 0, msg.Length); // Odeslání odpovědi
Console.WriteLine("Answered");
return; // Ukončení while - pokud chcete aby mohl uživatel napsat více zpráv, můžete odebrat
}
// Uzavření připojení
client.Close();
}
catch (Exception e)
{
Console.WriteLine($"Error: {e.Message}");
}
finally
{
// Uzavření serveru
server.Stop();
}
Console.WriteLine("Server closed.");
}
}
Vytvořte podobný server, kam se uživatel připojí a odešle dvě čísla oddělená mezerou. Server mu vrátí součet.
Zkuste vymyslet a vytvořit nějaký zajímavý projekt, který bude běžet jako server. Pokud to bude funkční, a budete chtít, můžu vám ho nechat běžet na serveru.