package exer;
import java.io.*;
import java.net.*;
public class SerSocket {
public static void main(String[] args) {
ServerSocket ss = null;
Socket socket = null;
BufferedReader br = null;
InputStreamReader ndis = null;
BufferedWriter nbw = null;
try {
ss = new ServerSocket(8888);
socket = ss.accept();
br = new BufferedReader(new FileReader("e:\\杭州市地图.gif"));
ndis = new InputStreamReader(socket.getInputStream());
nbw = new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream()));
int i = 0;
i=ndis.read();
String s = null;
System.out.println(i);
while ((s = br.readLine()) != null) {
nbw.write(s);
nbw.flush();
System.out.println(i++);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
ss.close();
socket.close();
br.close();
ndis.close();
nbw.close();
} catch (IOException e) {
e.printStackTrace();
} }}
////////////////////////////////////////////////////////////////////////////////////////////
package exer;
import java.io.*;
import java.net.*;
public class Clisocket {
public static void main(String[] args) {
Socket socket=null;
BufferedWriter bw=null;
OutputStreamWriter nosw=null;
BufferedReader nbr=null;
try {
socket = new Socket("localhost", 8888);
bw = new BufferedWriter(new FileWriter("java1.jpg"));
nosw = new OutputStreamWriter(socket
.getOutputStream());
nbr = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
nosw.write(12);
String s=null;
int i=10000;
s=nbr.readLine();
while(s!=null){
bw.write(s);
bw.newLine();
s=nbr.readLine();
System.out.println(i++);
}
bw.flush();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
socket.close();
bw.close();
nosw.close();
nbr.close();
} catch (IOException e) {
e.printStackTrace();
}
}}

解决方案 »

  1.   

    br = new BufferedReader(new FileReader("e:\\杭州市地图.gif")); 
    你用字符流读图片?
      

  2.   

    用Stream+buffer的形式对图片和音频文件的输入输出。
      

  3.   

    给段代码你参考下吧import java.io.*; 
    import java.net.*; 
    public class SerSocket { 
    public static void main(String[] args) { 
    File sourceFile=new File("Source.gif");
    int bufferLength = 1024;
    long fileLength = sourceFile.length();
    byte[] buffer = new byte[bufferLength];
    ServerSocket ss = null;
    Socket socket = null;
    OutputStream sOutputStream = null;
    FileInputStream fInputStream = null;
    try { 
    ss = new ServerSocket(8888);
    System.out.println("启动");
    socket = ss.accept();
    System.out.println("已连接客户端");
    sOutputStream = socket.getOutputStream(); 
    fInputStream = new FileInputStream(sourceFile);
    System.out.println("已传送:");
    int len = 0;
    long fileL = 0;
    do{
    len = fInputStream.read(buffer);//文件读到buffer
    if(len != -1){
    fileL += len;
    sOutputStream.write(buffer,0,len);//buffer写入socket流
    System.out.print("\b\b\b"+fileL*100/fileLength+"%");
    }
    }while(len != -1);
    } catch (FileNotFoundException e) { 
    e.printStackTrace(); 
    } catch (IOException e) { 
    e.printStackTrace(); 

    try { 
    ss.close(); 
    socket.close(); 
    sOutputStream.close(); 
    fInputStream.close(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    }  } } import java.io.*; 
    import java.net.*; 
    public class Clisocket { 
    public static void main(String[] args) { 
    Socket socket = null; 
    InputStream sInputStream = null; 
    FileOutputStream fOutputStream = null;  
    int bufferLength = 2048;
    byte[] buffer = new byte[bufferLength];
    File aimFile = new File("Aim.gif");
    try { 
    socket = new Socket("localhost", 8888); 
    System.out.println("已连接服务端");
    sInputStream = socket.getInputStream();
    fOutputStream = new FileOutputStream(aimFile);
    System.out.println("正在接受...");
    int len = 0;
    do{
    len = sInputStream.read(buffer);//socket流读入buffer
    if(len != -1)
    fOutputStream.write(buffer,0,len);//buffer写入文件
    }while(len != -1);
    System.out.println("完毕");
    } catch (UnknownHostException e) { 
    e.printStackTrace(); 
    } catch (IOException e) { 
    e.printStackTrace(); 

    try { 
    socket.close(); 
    sInputStream.close(); 
    fOutputStream.close(); 
    } catch (IOException e) { 
    e.printStackTrace(); 

    } } 
    看你原来的代码,我猜你是想通过TCP通讯的例子举一反三吧,就是流相关的基础还需加强,看看一般的教材后再多思考就可以了.