If v2rayN opens but its core fails to start, check each stage in turn: launching the process, reading the configuration, validating settings, and binding the listening port. This guide uses v2rayN on Windows to show how to capture a complete startup log, identify the process using a port, check JSON and core files, and confirm that listening resumes after a fix. If the core starts but connections time out, troubleshoot connectivity and routing instead.
First, determine whether the core failed to start or started but cannot connect
v2rayN is a graphical client for managing nodes, subscriptions, and settings; the core it launches handles the actual connections. An open main window and a visible server list do not mean the core is running. Conversely, a website failing to load does not prove a startup failure: an unreachable node, DNS issue, or routing mismatch can occur after the core starts successfully.
Use this sequence to identify the stage where the failure occurs; not every core follows these steps in exactly the same order internally. A log message such as failed to start is often just a summary. The underlying cause may appear in a later failed to listen message, a file path, or a parsing error. Keep the entire error and the lines around it rather than copying only the last sentence.
| What you see | Likely cause | Next step |
|---|---|---|
| A configuration parsing error appears, then the process exits | Configuration or parameter issue | Check the reported field, file path, and core type |
| A listen error includes a local address and port | Port conflict or binding restriction | Find the process using that port |
| The program file cannot be found; no core startup output appears | Missing file, incorrect path, or incomplete extraction | Check which executable is actually being launched |
| The local port is listening, but requests time out | Connection-stage failure | Check the node, DNS, system time, and routing |
Capture a complete startup log
Note the client version, the protocol used by the selected node, the chosen core, and your most recent change. Menu names vary by version, so the paths below use common labels from the Chinese interface. If the menus differ on your system, look for the same settings by name; do not reset all your configuration just to match the steps.
-
Record the current setup
Record the client version from Help → About. Under Settings → Parameter Settings, check the local listening port and options related to Core type. If your version manages cores on a separate page, note the core name shown there as well.
-
Limit the variables
Back up your configuration, temporarily turn off TUN, and test with just one node. The system proxy is an entry point for application traffic, not a prerequisite for starting the core. Avoid changing routing rules, DNS, and subscription contents at the same time.
-
Trigger a fresh start
Note the current time in the main window's log panel, then use the toolbar or tray menu to restart the service once. Avoid clicking repeatedly, which can mix output from multiple failed attempts.
-
Save the original output
Copy the file path, full error chain, and exit message from this startup attempt. If core output is hidden, enable core log display in the logging settings and try again. Before sharing logs, redact subscription URLs, node credentials, and personal file paths.
Port conflicts: identify the process from the listening address
The English messages below are common error snippets; use the address, port, and surrounding prefix from your own log. The example uses 127.0.0.1:10808, which is not a fixed default across all versions. Check the port shown in your settings or error message.
Error: bind: address already in use
Cause and fix: Another process is already using the address and port. Find the process listening on it, close any duplicate client instance, or choose an unused port for this inbound and restart.
Error: Only one usage of each socket address (protocol/network address/port) is normally permitted.
Cause and fix: This is a common Windows socket address conflict message. Find the port in the same error and check which process is listening on it. This message alone does not indicate a problem with the remote server.
Run the following read-only commands in PowerShell. The first lists TCP listeners and their PIDs; the second shows the corresponding process name, executable path, and startup arguments. If the path is blank, check Task Manager as well, and query with administrator privileges if needed.
Get-NetTCPConnection -LocalPort 10808 -State Listen -ErrorAction SilentlyContinue |
Select-Object LocalAddress, LocalPort, OwningProcess
Get-NetTCPConnection -LocalPort 10808 -State Listen -ErrorAction SilentlyContinue |
ForEach-Object {
Get-CimInstance Win32_Process -Filter "ProcessId = $($_.OwningProcess)"
} |
Select-Object ProcessId, Name, ExecutablePath, CommandLine
- Two copies of the client are running: Check the system tray and Task Manager, exit the extra instance normally, then start the one you want to keep.
- An old core process is still running: Exit v2rayN first, then use the path and command line to identify the leftover process. End it only after confirming what it belongs to; do not terminate every process with a matching name.
- Another service is using the port: Do not stop an unfamiliar system service. In Settings → Parameter Settings, change the relevant local listening port from the example value of 10808 to a confirmed free port such as 10818, then save and restart.
- Update clients after changing the port: Browsers, terminals, and apps with manually configured proxies may still point to the old port. Update them too. If the log reports a UDP bind failure, query the port with
Get-NetUDPEndpoint -LocalPort 10808.
Bottom line: identify the listener before changing the port
First check whether the process using the port is the current client's expected core. If the error is from an old log and the current listener is working, there is no need to change the port. Only clear duplicate instances or change the relevant inbound if the conflict still occurs when reproduced.
JSON errors: fix syntax first, then check what the fields mean
Valid JSON syntax and a configuration the core accepts are two different things. Missing quotes or brackets and extra commas are syntax errors. Misplaced fields or transport settings unsupported by the current core are configuration or compatibility issues. Do not keep refreshing the subscription just because the log says “configuration error.”
Error: unexpected EOF
Cause and fix: The input ended before the data was complete, which can happen if the configuration was truncated or a bracket was left unclosed. Check the outer log first to confirm that it is parsing a configuration file rather than a subscription response, then restore the complete file.
Error: invalid character '}' looking for beginning of object key string
Cause and fix: The parser reached a closing brace before reading an object key. A common cause is a trailing comma after the last item. Find the affected object, remove the trailing comma, and validate it with the core you actually use.
This snippet demonstrates the trailing-comma rule in strict JSON; it is not a complete, runnable proxy configuration. Neither objects nor arrays can have a comma after the last item, and strings must use straight double quotes.
{
"log": {
"loglevel": "warning"
}
}
In standard node mode, v2rayN usually generates the runtime configuration from the node and your settings. Direct edits to a generated file may be overwritten on restart, so correct the source in the node editor or relevant settings. In custom configuration mode, edit the imported source file and confirm that the path in the log points to that exact file.
- Check that the brackets match in arrays and objects such as
inboundsandoutbounds, and that Boolean values have not been written as strings. - If the log includes a line, column, or byte offset, check that location and the item before it. When a comma is missing, the error often points to the next field.
- Do not use subscription text, a single-node share link, or a client backup file as the core's runtime JSON.
- Do not upload a full configuration to an online formatter. Use a local editor to avoid exposing node addresses, user identifiers, or keys.
Missing core files and incompatible settings: troubleshoot them separately
If there is no output from the core itself, first check whether the program was launched at all. If Windows reports The system cannot find the file specified., identify the filename in the exception: the missing file could be the core executable or a dependency. Do not assume the subscription is invalid.
-
Check the path
Find the actual executable path in the startup error and check that the file exists. Do not just look for a file with the same name in a folder; confirm that the client is configured to use that file.
-
Extract the complete package
Extract the complete client package for your operating system and processor architecture to a new, separate folder, preserving the directory structure. Do not run it from the archive preview or copy only the main executable over an old installation.
-
Check for blocked files
Review Windows Security protection history and file permissions. If a file was quarantined or blocked, verify its source and the reason for detection before restoring it or downloading it again. Do not disable overall protection as a troubleshooting step.
-
Verify the core
Under Settings → Parameter Settings, check the options related to Core type and whether the current node specifies a core of its own. Prefer the core files bundled with the client and avoid mixing executables and configurations from different sources.
An incompatible setting usually means the core has already reached the configuration-reading stage. For example, some security or transport options on VLESS nodes require support from the selected core. VMess settings are not all interchangeable just because they use the same protocol. V2Ray and Xray share some configuration fields, but their fields and features are not identical; switching cores is not a universal fix.
.\xray.exe version
.\xray.exe run -test -config ".\config.json"
A passing test means this core can read the file and validate its configuration; it does not guarantee that the port is free or the node is reachable. If the test fails, keep the innermost error and fix the protocol, transport, security setting, or external file it identifies. Change one thing at a time, then test again.
After the fix: recheck listening, proxy entry points, and request logs
When restoring your setup, first confirm that the core stays running, then restore the system proxy, and test TUN separately last. Enabling every entry point at once can introduce new permission, virtual adapter, or routing issues that obscure the original failure.
- Startup: Restart the service once and confirm that this attempt produces no new configuration errors, bind failures, or immediate exit messages.
- Listening: Use the port query command above to check the actual port. The listening PID should belong to the core started in this attempt.
- Requests: Restore the proxy entry points you need and make one request. Check the client log to see whether it reaches the core. If access logging is disabled, the absence of a request entry does not mean the request never reached it.
- Features: Once the basic proxy works, restore TUN and custom routing. If the failure starts then, investigate the newly enabled feature instead of continuing to edit JSON punctuation.
What should I do if the port is already in use again after restarting my computer?
Look up the PID and executable path for the port in the error, then check startup apps in Task Manager and any client instances in the system tray. If two client copies launch automatically, keep only one startup entry. Changing the port without removing the duplicate startup will not solve the cause.
It works when run as administrator. Should I always run it that way?
Turn off TUN first and check whether the regular local proxy starts. Listening on a typical high-numbered local port usually does not require administrator rights. If it fails only with TUN enabled, check the log for permission or virtual adapter messages rather than routinely running with elevated privileges.
Can updating the subscription fix a JSON error?
It may help only if the error comes from node data and the subscription provider has fixed it. Malformed brackets in a custom configuration, a local port conflict, and missing core files all require a local fix. First check which configuration file the error path refers to.
There is no startup error, but websites still time out. What should I check?
First confirm that the application is using the current listening port, then check node reachability, DNS, system time, and routing. Core startup troubleshooting is complete at this point. Continue with the troubleshooting guide to narrow down the connection issue.
Download the v2rayN client
If you need a fresh copy of the complete client, choose a package for your operating system and processor architecture. Back up your current configuration, verify basic startup in a separate folder, then migrate your nodes and custom settings.
View download options Read the guide