Not able to connect to tcp Server

763 views
Skip to first unread message

rdhivya...@gmail.com

unread,
Jul 10, 2019, 11:00:50 AM7/10/19
to JaCoCo and EclEmma Users
Hi Team,

I am trying to run my JVM in TCP client mode and my TCP server is listening.
Below is the configuration setup.

Server End:(Configured in my eclipse)

-javaagent:jacoco-0.8.4\lib\jacocoagent.jar=port=9005,output=tcpserver,address=*

Client End:(In my cmd)

SET _JAVA_OPTIONS=-javaagent:jacoco-0.8.4\lib\jacocoagent.jar=port=9005,output=tcpclient,address=127.0.0.1

Problem:When ever i try to execute or compile my code it throws the below error in the clien end.

java.net.ConnectException: Connection refused: connect
at java.base/java.net.PlainSocketImpl.connect0(Native Method)
at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:101)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
at java.base/java.net.Socket.connect(Socket.java:591)
at java.base/java.net.Socket.connect(Socket.java:540)
at java.base/java.net.Socket.<init>(Socket.java:436)
at java.base/java.net.Socket.<init>(Socket.java:213)
at org.jacoco.agent.rt.internal_035b120.output.TcpClientOutput.createSocket(TcpClientOutput.java:85)
at org.jacoco.agent.rt.internal_035b120.output.TcpClientOutput.startup(TcpClientOutput.java:49)
at org.jacoco.agent.rt.internal_035b120.Agent.startup(Agent.java:122)
at org.jacoco.agent.rt.internal_035b120.Agent.getInstance(Agent.java:50)
at org.jacoco.agent.rt.internal_035b120.PreMain.premain(PreMain.java:49)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:513)
at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:525)
java.lang.NullPointerException
at org.jacoco.agent.rt.internal_035b120.output.TcpClientOutput.writeExecutionData(TcpClientOutput.java:72)
at org.jacoco.agent.rt.internal_035b120.Agent.shutdown(Agent.java:137)
at org.jacoco.agent.rt.internal_035b120.Agent$1.run(Agent.java:54)


I am not sure whether I am configuring it properly.
Guide me to move further.
Thanks

-Dhivya

Marc Hoffmann

unread,
Jul 10, 2019, 11:04:55 AM7/10/19
to jac...@googlegroups.com
Hi Dhivya,

what exactly do you want to do? Why do you need tcpserver/tcpclient as
output mode?

You can't connect JaCoCo agents to each other.

Regards,
-marc

rdhivya...@gmail.com

unread,
Jul 11, 2019, 3:29:27 AM7/11/19
to JaCoCo and EclEmma Users
Hi Marc,

I would like to get the code coverage report without shutting down my application, I thought the agents will be able to connect to each other. But I was wrong.

Regards,
Dhivya.

Evgeny Mandrikov

unread,
Jul 11, 2019, 3:59:34 AM7/11/19
to JaCoCo and EclEmma Users
Please have a look at examples in documentation - https://www.jacoco.org/jacoco/trunk/doc/api.html :

Evgeny Mandrikov

unread,
Jul 11, 2019, 5:41:45 AM7/11/19
to JaCoCo and EclEmma Users
And there is ready-to-use "dump" command in JaCoCo Command Line Interface - https://www.jacoco.org/jacoco/trunk/doc/cli.html

rdhivya...@gmail.com

unread,
Jul 11, 2019, 8:06:02 AM7/11/19
to JaCoCo and EclEmma Users
Hi,

Thanks. I tried setting the agent in tcpserver mode and fetch the exec file using the dump CLI command. But when I try to fetch the report using cli, get the below error.

Configuration:
-javaagent:jacoco-0.8.4\lib\jacocoagent.jar"=port=9005,output=tcpserver,address=*

dump command:
java -jar jacoco-0.8.4\lib\jacococli.jar dump --port 9005 --destfile C:\Dhivya\jacoco\jacoco-11july.exec

Report Command:

java -jar jacoco-0.8.4\lib\jacococli.jar report jacoco-client.exec --classfiles MyRest\target\classes\com\infor\m3\MyRest\excel\* --html jacoco\html-tomcat\ --name cc-report


Error:
[INFO] Loading execution data file C:\Users\dravichandran\eclipse-workspace\Jacoco\jacoco-client.exec.
[INFO] Loading execution data file C:\Users\dravichandran\eclipse-workspace\MyRest\target\classes\com\infor\m3\MyRest\excel\RefreshSheet.class.
Exception in thread "main" java.io.IOException: Invalid execution data file.
at org.jacoco.cli.internal.core.data.ExecutionDataReader.read(ExecutionDataReader.java:89)
at org.jacoco.cli.internal.core.tools.ExecFileLoader.load(ExecFileLoader.java:59)
at org.jacoco.cli.internal.core.tools.ExecFileLoader.load(ExecFileLoader.java:73)
at org.jacoco.cli.internal.commands.Report.loadExecutionData(Report.java:98)
at org.jacoco.cli.internal.commands.Report.execute(Report.java:82)
at org.jacoco.cli.internal.Main.execute(Main.java:89)
at org.jacoco.cli.internal.Main.main(Main.java:104).

Regards,
Dhivya

Evgeny Mandrikov

unread,
Jul 11, 2019, 8:53:51 AM7/11/19
to JaCoCo and EclEmma Users


On Thursday, July 11, 2019 at 2:06:02 PM UTC+2, rdhivya...@gmail.com wrote:
Hi,

Thanks. I tried setting the agent in tcpserver mode and fetch the exec file using the dump CLI command. But when I try to fetch the report using cli, get the below error.

 

Configuration:
 -javaagent:jacoco-0.8.4\lib\jacocoagent.jar"=port=9005,output=tcpserver,address=*

 

dump command:
java -jar jacoco-0.8.4\lib\jacococli.jar dump  --port 9005 --destfile C:\Dhivya\jacoco\jacoco-11july.exec


This command writes to file "C:\Dhivya\jacoco\jacoco-11july.exec", but next command uses file "jacoco-client.exec" Why?
 

Report Command:

java -jar jacoco-0.8.4\lib\jacococli.jar report jacoco-client.exec --classfiles MyRest\target\classes\com\infor\m3\MyRest\excel\* --html jacoco\html-tomcat\ --name cc-report


This command also has "\*" (backslash character followed by star character) at the end of value for "--classfiles" parameter. Why?

Your directory "MyRest\target\classes\com\infor\m3\MyRest\excel" 
for sure contains file "RefreshSheet.class"
let's say that it also contains file "Foo.class"
I'm pretty sure that in your command line interpreter aka shell this star character causes command to be interpreted as

java -jar jacoco-0.8.4\lib\jacococli.jar report jacoco-client.exec --classfiles MyRest\target\classes\com\infor\m3\MyRest\excel\Foo.class MyRest\target\classes\com\infor\m3\MyRest\excel\RefreshSheet.class --html jacoco\html-tomcat\ --name cc-report

So that 
"jacoco-client.exec" is first value for "execfiles" parameter,
"MyRest\target\classes\com\infor\m3\MyRest\excel\Foo.class" is value for "--classfiles" parameter,
"MyRest\target\classes\com\infor\m3\MyRest\excel\RefreshSheet.class" is second value for "execfiles" parameter,
thus you get loading of two execution data files


Error:
[INFO] Loading execution data file C:\Users\dravichandran\eclipse-workspace\Jacoco\jacoco-client.exec.
[INFO] Loading execution data file C:\Users\dravichandran\eclipse-workspace\MyRest\target\classes\com\infor\m3\MyRest\excel\RefreshSheet.class.


whereas las one is not execution data file and so you get corresponding exception
 

Exception in thread "main" java.io.IOException: Invalid execution data file.
        at org.jacoco.cli.internal.core.data.ExecutionDataReader.read(ExecutionDataReader.java:89)
        at org.jacoco.cli.internal.core.tools.ExecFileLoader.load(ExecFileLoader.java:59)
        at org.jacoco.cli.internal.core.tools.ExecFileLoader.load(ExecFileLoader.java:73)
        at org.jacoco.cli.internal.commands.Report.loadExecutionData(Report.java:98)
        at org.jacoco.cli.internal.commands.Report.execute(Report.java:82)
        at org.jacoco.cli.internal.Main.execute(Main.java:89)
        at org.jacoco.cli.internal.Main.main(Main.java:104).


You don't need to specify "\*", because
value of "--classfiles" parameter can be a directory
and in this case all class files from this directory and all sub-directories will be used.
So you can even use "C:\Users\dravichandran\eclipse-workspace\MyRest\target\classes".

For example given following "Example.java" file in directory "src"

class Example {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
        while (true) ;
    }
}

after compilation into directory "classes"

javac src\Example.java -d classes

execution of

java -javaagent:jacoco-0.8.4\lib\jacocoagent.jar=output=tcpserver -cp classes Example

java -jar jacoco-0.8.4\lib\jacococli.jar dump --destfile jacoco.exec

java -jar jacoco-0.8.4\lib\jacococli.jar report jacoco.exec --classfiles classes --sourcefiles src --html report

produces following report

example.png



rdhivya...@gmail.com

unread,
Jul 11, 2019, 10:06:26 AM7/11/19
to JaCoCo and EclEmma Users
Thanks, Evgeny for being very supportive. It's working now.
You made my day.

Regards,
Dhivya.

Message has been deleted

Dhivya

unread,
Aug 22, 2019, 7:18:27 AM8/22/19
to JaCoCo and EclEmma Users
Hi,

I want to run the Example.java file in the server and write the execution data to my local system.
So I made the below execution in server and got the "cannot assign requested address: JVM_Bind.".
I am not sure where I am doing wrong. Help me in moving forward.

java -javaagent:jacoco-0.8.4\lib\jacocoagent.jar=output=tcpserver,address=<mylocalsystemaddress>,port=9025 -cp java\classes Example

Error:
java.net.BindException: Cannot assign requested address: JVM_Bind
        at java.net.DualStackPlainSocketImpl.bind0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source)
        at java.net.AbstractPlainSocketImpl.bind(Unknown Source)
        at java.net.PlainSocketImpl.bind(Unknown Source)
        at java.net.ServerSocket.bind(Unknown Source)
        at java.net.ServerSocket.<init>(Unknown Source)
        at org.jacoco.agent.rt.internal_035b120.output.TcpServerOutput.createServerSocket(TcpServerOutput.java:106)
        at org.jacoco.agent.rt.internal_035b120.output.TcpServerOutput.startup(TcpServerOutput.java:53)
        at org.jacoco.agent.rt.internal_035b120.Agent.startup(Agent.java:122)
        at org.jacoco.agent.rt.internal_035b120.Agent.getInstance(Agent.java:50)
        at org.jacoco.agent.rt.internal_035b120.PreMain.premain(PreMain.java:49)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(Unknown Source)
        at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(Unknown Source)
Hello, World!

Regards,
Dhivya.

Evgeny Mandrikov

unread,
Aug 22, 2019, 10:16:58 AM8/22/19
to JaCoCo and EclEmma Users
Hi,

Have you tried searching the message in internet - https://lmgtfy.com/?q=Cannot+assign+requested+address%3A+JVM_Bind ?

Also javadoc of BindExceptions ( https://docs.oracle.com/javase/7/docs/api/java/net/BindException.html ) is pretty explicit:
Signals that an error occurred while attempting to bind a socket to a local address and port. Typically, the port is in use, or the requested local address could not be assigned.
Reply all
Reply to author
Forward
This conversation is locked
You cannot reply and perform actions on locked conversations.
0 new messages