Here is the problem i am working on. 1)There is one server and one client. 2)server is connected with client. 3)server sends one file(.mp3). 4)after sending the file it sends some additional String data.
I am getting IOException after the file is sent, so i client is not reading additional string data.WHYYYYYYYY?
Here is the server code
public class server {
ServerSocket server;
Socket socket;
FileInputStream fis;
FileOutputStream fos;
DataInputStream dis;
DataOutputStream dos;
public static void main(String args[])
{
server s=new server();
s.connnect();
s.init();
s.send("f://song.mp3");
}
public void connnect()
{
try {
server=new ServerSocket(8080);
socket =server.accept();
} catch (IOException e) {
}
}
public void init()
{
try {
dis=new DataInputStream(socket.getInputStream());
dos=new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
public void send(String name)
{
File f=new File(name);
try {
fis=new FileInputStream(f);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String nam=f.getName();
try {
dos.writeUTF(nam);
System.out.println("header sent");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
byte[] buffer=new byte[1024];
int read=-1;
try {
while((read=fis.read(buffer))!=-1)
{
dos.write(buffer, 0, read);
}
System.out.println("file "+name+" sent");
dos.writeUTF("this is the msg which is not received by client because of IOexception in client side");
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Client side code
public class client {
ServerSocket server;
Socket socket;
FileInputStream fis;
FileOutputStream fos;
DataInputStream dis;
DataOutputStream dos;
public static void main(String args[])
{
client s=new client();
s.connect();
s.init();
try {
s.rec(s.dis.readUTF()); ///this the name of the String
} catch (IOException e) {
}
}
public void connect()
{
try {
socket=new Socket("127.0.0.1",8080);
System.out.println("connected with server");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void init()
{
try {
dis=new DataInputStream(socket.getInputStream());
dos=new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {
System.out.println("IO EXception in streams");
e.printStackTrace();
}
}
public void rec(String filename)
{
File f=new File("f://abc");
f.mkdirs();
File temp=new File(f,filename);
try {
fos=new FileOutputStream(temp);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
byte[] buffer=new byte[1024];
int read=-1;
System.out.println("started reading file"+filename);
try {
while((read=dis.read(buffer))!=-1)
{
fos.write(buffer, 0, read);
}
String FINAL_MSG=dis.readUTF();
System.out.println("ended "+FINAL_MSG);
}
catch (IOException e) {
System.out.println("why IO exception?");
}
}
public void sendFile(String name)
{
File f=new File("f://abc");
f.mkdirs();
File temp=new File(f,name);
try {
fos=new FileOutputStream(temp);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
byte[] buffer=new byte[1024];
int read=-1;
try {
while((read=dis.read(buffer))!=-1)
{
fos.write(buffer, 0, read);
}
}
catch(SocketException e)
{
System.out.println(name+" has end"+" "+(socket==null));
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
I want to read the additional string data (FINAL_MSG). how it is possible?
Server output
header sent
file f://song.mp3 sent
Final MSG is sent from server side
Client output
connected with server
started reading filesong.mp3
java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.DataOutputStream.write(Unknown Source)
at s1.send(s1.java:87) at s1.main(s1.java:30)
why IO exception?
Your Server program is terminated before client could read all data resulting into IO Exception.
Your Server program is sending a mp3 file, then printing message file sent, again writing data over the socket and then since nothing is left to do, it is terminated/ends so server socket is closed, which in turn causes IO Exception in the client program.