Re: Broken pipe (SocketException) despite activity
I have a problem with a socket connection. I open a connection to the
server, send some data and close it again. So far, so good. The problem
arises when I want to send more data (eg. 50kbyte). In such a case, the
Client always terminates with a SocketException and the message "broken
pipe". The server is fine (or at least there is no exception).
If you closed the connection, then you need to open a new socket
before you can send more data.
If that's not the problem then you need to post your code.
This is not the problem.
I extracted the problematic code. The client is:
import java.net.*;
import java.io.*;
public class Client
{
public static void main(String[] args) {
byte[] sendData = new byte[1024];
byte[] rcvData = new byte[8];
try {
// connect to the node
Socket socket = new Socket("planetlab02.ethz.ch", 5452);
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
for(int i = 0; i < 50; i++) {
os.write(sendData);
os.flush();
System.out.print("written...");
is.read(rcvData);
System.out.println("read...");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
and the server:
import java.net.*;
import java.io.*;
public class Server {
public static void main(String[] args) {
try {
Socket socket = null;
InputStream is = null;
OutputStream os = null;
ServerSocket serverSocket = new ServerSocket(5452);
// accept connections until thread is terminated
while (true) {
socket = serverSocket.accept();
// if something tried to connect
is = socket.getInputStream();
os = socket.getOutputStream();
byte[] b = new byte[1024];
byte[] a = new byte[8];
for (int i = 0; i < 50; i++) {
is.read(b);
System.out.print("read...");
os.write(a);
os.flush();
System.out.println("written...");
}
socket.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
I know this code doesn't really make sense. But it's taken out of
context to illustrate the problem (which of course still exists). After
a few read/writes, the mentioned error occurs.
Thanks and regards,
Stefan Weber