Я перейду к делу, я застрял на этом уже несколько часов. Тонны Google и тонны исследований, но пока нет прямого ответа.
У меня есть клиент и сервер, закодированные для TCP, которые отлично работают, однако я хочу, чтобы клиент также мог использовать UDP с сервером для неважных пакетов, таких как местоположение игрока.
На данный момент это мой код подключения для подключенных клиентов.
public void ConnectToServer(){
tcp_client = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
tcp_client.Connect(server_ip, server_port);
tcp_stream = new NetworkStream(this.tcp_client);
this.udp_client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
this.udp_client.BeginConnect(IPAddress.Parse(server_ip), server_port,new AsyncCallback(udp_connected), null);
}
Теперь клиент — это не то, с чем у меня были проблемы, потому что, когда я использую udp.Send(byteArray)
, он, кажется, отправляет, поскольку он не генерирует никаких исключений, но сам сервер не отвечает ни на какие полученные данные.
Обратите внимание, что это НЕ стопроцентное копирование/вставка кода. Измените, чтобы показать, в чем проблема.
private Socket c;
private UdpClient udp;
private isRunning = true;
public Client(Socket c){
// This was accepted from TcpListener on Main Server Thread.
this.c = c;
this.networkStream = new NetworkStream(this.c);
udp = new UdpClient();
udp.Connect((IPEndPoint)c.RemoteEndPoint);
// Then starts 2 thread for listening, 1 for TCP and 1 for UDP.
}
private void handleUDPTraffic(){
IPEndPoint groupEP = (IPEndPoint)c.RemoteEndPoint;
while (isRunning){
try{
byte[] udp_received = udp.Receive(ref groupEP);
Console.WriteLine("Received UDP Packet Data: " + udp_received.Length);
}catch{
log.ERROR("UDP", "Couldn't Receive Data...");
}
}
}