简体   繁体   中英

Java sockets: Program stops at socket.getInputStream() w/o error?

InetAddress host = InetAddress.getLocalHost();
Socket link = new Socket(host, Integer.parseInt(args[0]));
System.out.println("before input stream");
ObjectInputStream in = new ObjectInputStream(link.getInputStream());
System.out.println("before output stream");
ObjectInputStream out = new ObjectOutputStream(link.getOutputStream());

"before input stream" is the last lifesign on cmd-line. There is no Exception thrown. Why is this happening? I don't understand...

args[0] is 5000. //edit: flush doesn't help.

This is because the ObjectInputStream(InputStream in) -constructor is a blocking-call if the inputStream is empty.

Quote :

Creates an ObjectInputStream that reads from the specified InputStream. A serialization stream header is read from the stream and verified. This constructor will block until the corresponding ObjectOutputStream has written and flushed the header.

Possibly,

link.getInputStream(); 

could be returning null, though that should return an error by looking at the class files. Another thing I noticed was, you declare:

ObjectInputStream out = new ObjectOutputStream(link.getOutputStream());

From this, you are stating a ObjectInputStream as a ObjectOutputStream without a cast (Would not be appropriate here anyways)

you should try:

ObjectOutputStream out = new ObjectOutputStream(link.getOutputStream());

This should work, as the script may queue the System.out, but notice the error before it can be initialized.

Tell me if this works :D

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM