001package net.minecraft.client.multiplayer; 002 003import cpw.mods.fml.relauncher.Side; 004import cpw.mods.fml.relauncher.SideOnly; 005import java.io.IOException; 006import java.net.DatagramPacket; 007import java.net.InetAddress; 008import java.net.MulticastSocket; 009import java.net.SocketTimeoutException; 010import net.minecraft.client.Minecraft; 011 012@SideOnly(Side.CLIENT) 013public class ThreadLanServerFind extends Thread 014{ 015 /** The LanServerList */ 016 private final LanServerList localServerList; 017 018 /** InetAddress for 224.0.2.60 */ 019 private final InetAddress broadcastAddress; 020 021 /** The socket we're using to receive packets on. */ 022 private final MulticastSocket socket; 023 024 public ThreadLanServerFind(LanServerList par1LanServerList) throws IOException 025 { 026 super("LanServerDetector"); 027 this.localServerList = par1LanServerList; 028 this.setDaemon(true); 029 this.socket = new MulticastSocket(4445); 030 this.broadcastAddress = InetAddress.getByName("224.0.2.60"); 031 this.socket.setSoTimeout(5000); 032 this.socket.joinGroup(this.broadcastAddress); 033 } 034 035 public void run() 036 { 037 byte[] abyte = new byte[1024]; 038 039 while (!this.isInterrupted()) 040 { 041 DatagramPacket datagrampacket = new DatagramPacket(abyte, abyte.length); 042 043 try 044 { 045 this.socket.receive(datagrampacket); 046 } 047 catch (SocketTimeoutException sockettimeoutexception) 048 { 049 continue; 050 } 051 catch (IOException ioexception) 052 { 053 ioexception.printStackTrace(); 054 break; 055 } 056 057 String s = new String(datagrampacket.getData(), datagrampacket.getOffset(), datagrampacket.getLength()); 058 Minecraft.getMinecraft().getLogAgent().func_98230_d(datagrampacket.getAddress() + ": " + s); 059 this.localServerList.func_77551_a(s, datagrampacket.getAddress()); 060 } 061 062 try 063 { 064 this.socket.leaveGroup(this.broadcastAddress); 065 } 066 catch (IOException ioexception1) 067 { 068 ; 069 } 070 071 this.socket.close(); 072 } 073}