Read the message first: three kinds of failure
Java Edition reports a failed join on a screen headed Failed to connect to the server, with the reason underneath. Before you even click Join, the server list can show Can't connect to server, Can't resolve hostname or Incompatible version! next to the entry. Those few words sort every problem into one of three groups, and each group has a different fix.
Network failures mean your game never had a conversation with the server: timed out, refused, unknown host. Version failures mean it reached the server and the two sides do not speak the same version. Login failures mean the server is up, your version matches, and the server has decided not to let you in: username verification, the whitelist, a ban or a full server.
The reason line is often long and technical, with names starting io.netty. That is Netty, the networking library Java Edition uses, and the part to read is the words after the class name, such as Connection refused, and the address at the end, which shows exactly where your game tried to go.
- Network: Connection timed out, Connection refused, Unknown host, Can't resolve hostname
- Version: Incompatible client! Please use, Outdated client!, Outdated server!, Incompatible version!
- Login: Failed to verify username!, You are not white-listed on this server!, You are banned from this server, The server is full!
Connection timed out
A time-out means your connection attempt went out and nothing came back. The Minecraft Wiki's server FAQ describes it as a firewall ignoring the connection attempt and calls it usually a firewall problem. In practice it is one of four things: the address is wrong, the server's port is not forwarded, a firewall on the server machine drops the traffic, or the server sits on a home connection behind CGNAT, where no forward can reach it.
As a player, check the address character by character, including the port after the colon, and ask the owner to confirm both. Try from another network, such as a phone on mobile data. If nobody outside the owner's network can connect while players inside it can, the problem is on the owner's side.
As the owner, allow Java or the server port through the firewall on the server machine, confirm the router forwards TCP 25565, or your chosen port, to the server's current internal IP, and test with an online port checker while the server is running. If the router's WAN address is not your public IP, or sits in 100.64.0.0/10, see the CGNAT point in the owner checklist below.
The similar message Timed out, shown after you were already in the world, is different: the connection was made and then dropped. That points at an unstable connection on either side rather than a closed port.
- Wrong IP or port: recheck the full address, including :port
- Firewall on the server machine: allow Java or the port
- Port not forwarded, or forwarded to an old internal IP: fix the router rule
- Behind CGNAT: forwarding cannot work on that line
Connection refused, and io.netty errors
This one usually reads io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused, followed by the address. Netty adds the address to the system's own error, which is why the line is so long.
Refused is more useful than it sounds. Something at that address answered and said nothing is listening on that port. The Minecraft Wiki puts it the same way and says it usually means the server has not started properly. The machine is reachable, so the network path is mostly fine.
The causes, most common first: the server is not running, because it crashed, is still starting, or stopped at the first start waiting for eula=true; the player is using the wrong port, for example 25565 when the owner set a different server-port; or the address points at the wrong machine. The wiki also lists one owner-side cause: switching the router's firewall off instead of setting up a port forward.
If the reason says Unknown host, or the server list shows Can't resolve hostname, the game could not turn the name you typed into an address at all. Check the spelling, and if the name is a domain, check that its DNS record exists and points at the server.
- Server not running: check the console for a crash or an unaccepted EULA
- Wrong port: match the port in the address to server-port
- Unknown host or Can't resolve hostname: fix the spelling or the DNS record
Incompatible client, Outdated client and Outdated server
Your game and the server are on different Minecraft versions. A vanilla server has said this the same way since 1.16.4, whichever side is newer: Incompatible client! Please use, followed by the server's version, for example Incompatible client! Please use 26.3. Before 1.16.4 the text was Outdated client! Please use when your game was older, and Outdated server! I'm still on when the server was. Spigot and Paper servers still send that older wording, because those are the default outdated-client and outdated-server messages in spigot.yml. In the server list, a mismatch shows as Incompatible version!
The fix is to match versions. As a player, open the Minecraft Launcher, create an installation for the version the message names, and launch that. As an owner, update the server if your players are on the newer release, but treat updates as one-way: back up first, because a world opened in a newer version will not load in the older one again.
If the versions match and joining still fails, compare mod loaders and mod lists. A modded server rejects a client whose mods do not match, and our guide to Paper, Forge and Fabric explains why. Bedrock players joining a Java server through Geyser are limited to the Bedrock versions Geyser currently supports.
- Incompatible client! Please use 26.3: play the version the message names
- Outdated client! on Spigot or Paper: your game is older than the server
- Outdated server! I'm still on: the server is older than your game
- Owners: back up before every version update; worlds cannot be downgraded
Failed to verify username!
This comes from a server with online-mode=true, the default. When you join, the server asks Mojang's session service to confirm that your account really started this login. If that check fails, the server turns you away with Failed to verify username!
For a player, the usual cause is a stale sign-in. Close the game and the launcher completely, open the launcher, check you are signed in to the right account, and join again. The game's own message for a broken session says the same thing: Invalid session (Try restarting your game and the launcher). A launcher that does not sign in to a Microsoft account cannot pass this check at all, by design.
Two related messages look similar and have different fixes. Authentication servers are down. Please try again later. Sorry! means the check could not be completed, so waiting is the fix. Expired profile public key. Check that your system time is synchronized means your computer's clock is wrong; set it to update automatically and restart the game.
For the owner, the tempting fix is online-mode=false. Do not use it. The Minecraft Wiki notes that it lets unlicensed accounts connect, so anyone can join under any name, including yours, and switching it later changes every player's UUID.
- Restart the game and the launcher, and sign in again
- Check the computer's clock if the message mentions the profile public key
- Authentication servers are down: wait and retry
- Owners: keep online-mode=true
You are not white-listed on this server!
The server has its whitelist on and your account is not on it. That is the vanilla wording; Spigot and Paper send their own default, You are not whitelisted on this server!, from spigot.yml. Both mean the same thing, and only the owner or an operator can fix it.
The fix is one console command: whitelist add followed by your exact username. The player does not need to be online. If the owner edited whitelist.json by hand, they must run whitelist reload, or the server keeps using the old list. whitelist list shows who is on it. Operators can always connect on Java Edition, so an owner locked out of their own server can op themselves from the console.
This message has become more common for new servers. From 26.3, a freshly generated server.properties has white-list=true, where older versions defaulted to false, so a server set up today turns everyone away until the owner adds them.
Bedrock players who join through Geyser and Floodgate need adding differently. GeyserMC's FAQ gives /fwhitelist add followed by their Bedrock name, which works after they have joined any Geyser server once, or the normal whitelist add with Floodgate's prefix in front of the name.
Two other turn-aways are just as direct. You are banned from this server means your account is on the ban list, and The server is full! means it has reached max-players, which defaults to 20.
- whitelist add <name>, then try again
- whitelist reload after editing whitelist.json by hand
- Bedrock through Floodgate: /fwhitelist add <name>
- The server is full!: raise max-players or wait for a slot
Checklist for the server owner
If several players get the same error, work through this list on the server side, in order. Most problems are found by the third step.
Test from the inside out, as the Minecraft Wiki suggests: first connect to localhost on the server's own computer, then to its internal IP from another device on the same network, then to the external IP from outside. The first test that fails tells you which layer is broken: the server itself, the machine's firewall, or the router and the line beyond it.
The Minecraft server.properties generator on this site builds a clean file with the port, whitelist and the rest set, if you suspect yours has been edited into a mess.
- The server is running: the console has finished starting and shows no crash, and eula.txt says eula=true
- server-port matches the port players type; server-ip is empty, since a filled-in server-ip is the wiki's most common cause of a failed port bind
- The firewall on the server machine allows Java or the port
- The router forwards TCP 25565, or your port, to the server's current internal IP, and an online port checker sees it open while the server runs
- No CGNAT: the router's WAN address matches your public IP and is not in 100.64.0.0/10
- online-mode=true, and the whitelist contains everyone who should get in
- enable-status=true: with it off the server shows as offline in the list while still accepting connections
- Geyser for Bedrock players: its port, 19132 by default, forwarded for both TCP and UDP