Reputation: 600
In my TCP socket program I have to send data from client to server. In server side I have to read the streams and write it in file. But File is created and nothing is written inside.
Client side coding to send file:
try
{
Socket ss = new Socket("localhost", 5010);
BufferedOutputStream put = new BufferedOutputStream(ss.getOutputStream());
BufferedReader st = new BufferedReader(new InputStreamReader(ss.getInputStream()));
File f = new File("e://read.txt");
FileInputStream fis = new FileInputStream(f);
byte buf[] = new byte[1024];
int read;
while((read = fis.read(buf, 0, 1024)) != -1)
{
put.write(buf,0,read);
put.flush();
}
//d.close();
System.out.println("File transfered");
ss.close();
}
catch(Exception e)
{
System.out.println(e);
}
Server to read the inputstream and write it in a file:
try
{
ServerSocket ss = new ServerSocket(5010);
Socket s = ss.accept();
BufferedReader get = new BufferedReader(new InputStreamReader(s.getInputStream()));
FileWriter writedata = new FileWriter("c://write.txt");
BufferedWriter bw = new BufferedWriter(writedata);
String line=bw.toString();
while ((line = get.readLine()) != null) {
bw.write(line + "\n");
}
}
catch(Exception e)
{
System.out.println(e);
}
What is the problem?
Upvotes: 0
Views: 280
Reputation: 311028
Don't use Readers and Writers unless you know that the data is text. Use InputStreams and OutputStreams, and copy them so:
while ((count = in.read(buffer)) > 0)
{
out.write(buffer, 0, count);
}
out.close();
in.close();
Use this logic in both the client and the server.
Notes:
flush()
inside that loop.buffer
is greater than 4096, which it should be, it is pointless to use a BufferedInputStream
.Upvotes: 0
Reputation: 817
You forgot bw.close and bw.flush....below is the code that works...
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class TestServer
{
public static void main(String[] args)
{
try
{
ServerSocket ss=new ServerSocket(5010);
Socket s=ss.accept();
BufferedReader get= new BufferedReader(new InputStreamReader(s.getInputStream()));
FileWriter writedata=new FileWriter("c://Test//testoutput.txt");
BufferedWriter bw=new BufferedWriter(writedata);
String line=bw.toString();
while ((line = get.readLine()) != null) {
bw.write(line + "\n");
}
bw.flush();
bw.close();
}
catch(Exception e)
{
System.out.println(e);
}
}
}
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class TestClient
{
public static void main(String[] args)
{
try
{
Socket ss=new Socket("localhost",5010);
BufferedOutputStream put=new BufferedOutputStream(ss.getOutputStream());
BufferedReader st=new BufferedReader(new InputStreamReader(ss.getInputStream()));
File f=new File("c://Test//testinput.txt");
FileInputStream fis=new FileInputStream(f);
byte buf[]=new byte[1024];
int read;
while((read=fis.read(buf,0,1024))!=-1)
{
put.write(buf,0,read);
put.flush();
}
//d.close();
System.out.println("File transfered");
ss.close();
ss.close();
}
catch(Exception e)
{
System.out.println(e);
}
}
}
Upvotes: 2