Witaj, poproszę ciebie abyś wykonał test uruchamiając poniższy kod.
Pamiętaj aby w opcjach VS ustawić minimum c# 7.1, gdyż ta wersja zawiera sygnaturę asynchroniczną dla Main.
Napisałem ten mini kod dla klienta i serwera używając podejścia asynchronicznego ale w teście tym chodzi o to abyś uruchomił część serwerową oraz osobno część klienta (należy odkomentować odpowiedni kod linie 12 i 13) tylko po to aby sprawdzić, czy działa minimum wysyłania i odbierania, a problem nie leży gdzieś we fragmencie kodu, który uruchamia twój kod, bo może dochodzi do zablokowania i oczekiwania na jakimś wywołaniu, a nie na problemach z komunikacją poprzez sieć.
Poniższy kod sprawdzałem lokalnie ale powinien działać też w twojej konfiguracji (ustaw odpowiednio adres ip serwera w kodzie klienta bo jest ustawiony na "127.0.0.1"). W zależności jakiego windowsa używasz (no chyba że uruchamiasz to na linuksie) to może się pojawić okienko do zatwierdzenia zgody do komunikacji programu (ja tak miałem, wystarczy wybrać odpowiednie ustawienie).
using System.Collections.Generic;
using System.Threading.Tasks;
namespace UdpClientServer
{
class ConsoleMain
{
static async Task Main(string[] args)
{
var tasks = new List<Task>();
//tasks.Add(Server.RunAsync()); // uncomment for server side
//tasks.Add(Client.RunAsync()); // uncomment for client side
await Task.WhenAll(tasks);
}
}
}
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace UdpClientServer
{
public class Server
{
public static async Task RunAsync()
{
var localEndPoint = new IPEndPoint(IPAddress.Any, 8080);
var server = new UdpClient(localEndPoint);
var result = await server.ReceiveAsync();
var message = Encoding.ASCII.GetString(result.Buffer);
System.Console.WriteLine($"from client: {result.RemoteEndPoint}");
System.Console.WriteLine($": {message}");
// send message back to client
var welcome = Encoding.ASCII.GetBytes($"Welcome on server, your message: {message}");
await server.SendAsync(welcome, welcome.Length, result.RemoteEndPoint);
}
}
}
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace UdpClientServer
{
public class Client
{
public static async Task RunAsync()
{
var remoteAddress = IPAddress.Parse("127.0.0.1");
var remoteEndPoint = new IPEndPoint(remoteAddress, 8080);
var message = Encoding.ASCII.GetBytes($"Hello I am a client");
var client = new UdpClient();
await client.SendAsync(message, message.Length, remoteEndPoint);
var result = await client.ReceiveAsync();
var message2 = Encoding.ASCII.GetString(result.Buffer);
System.Console.WriteLine($"from server: {result.RemoteEndPoint}");
System.Console.WriteLine($": {message2}");
}
}
}
Uruchom odpowiednio programiki i powiedz, czy serwer odesłał wiadomość do klienta, rezultat powinien być jak poniżej.
Po stronie serwera:
from client: 127.0.0.1:50451
: Hello I am a client
Po stronie klienta:
from server: 127.0.0.1:8080
: Welcome on server, your message: Hello I am a client