本程序通过socket编程实现从客户端发送文件到服务器端服务器端程序:import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;/**
 * 本程序通过socket编程实现从客户端发送文件到服务器端
 * @author ××× 
 */
 /**
  * 多线程类
  */
class MultiServer extends Thread{
private Socket socket;
private DataInputStream dataIn;
private FileOutputStream out;
int length=0;
byte[] buffer=new byte[1024];
public MultiServer(Socket s)throws IOException{

socket=s;
dataIn= new DataInputStream(socket.getInputStream());

File f = new File("d:\\a.txt");
 if (!f.exists())
   f.createNewFile();
FileOutputStream out = new FileOutputStream(f);
start();
}

public void run(){
try{
while((length=dataIn.read(buffer))!=-1){
out.write(buffer, 0, length);
}
}catch(IOException e){
e.printStackTrace();
}finally{
try{
  out.close();
  System.out.println("服务器端文件接收完毕!!!");
  socket.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
}//
public class FileServer {
 static final int PORT=5100;
 public static void main(String[] a)throws IOException {
// byte[] buffer=new byte[1024];
 ServerSocket s = new ServerSocket(PORT);
 System.out.println("服务器启动!");
 try{
 while(true){
 Socket socket=s.accept();
 try{
 new MultiServer(socket);
 }catch(IOException e){
 socket.close();
 e.printStackTrace();
 }
 }
 }catch(IOException e){
 e.printStackTrace();
 }finally{
 s.close();
 }
 // FileServer fileServer = new FileServer();
 // fileServer.sendFile();
 }}----------------------客户端程序import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;/**
 * 本程序通过socket编程实现从客户端发送文件到服务器端
 * @author ××× 
 */
public class FileClient extends Thread {
 public static void main(String[] args) {
  FileClient fileClient = new FileClient();
  fileClient.receiveFile();
 }
 public void receiveFile() {
  byte[] buffer = new byte[1024];
  int length = 0;
  try {
   Socket socket = new Socket("192.168.1.101", 5100);
   File f = new File("d:\\b.txt");
   FileInputStream fis = new FileInputStream(f);
   DataInputStream dataIn = new DataInputStream(fis);
   DataOutputStream dataOut = new DataOutputStream(socket
     .getOutputStream());
   
   while ((length = dataIn.read(buffer)) != -1) {
    dataOut.write(buffer, 0, length);
   }
   dataOut.flush();
   dataOut.close();
   fis.close();
   System.out.println("文件传送完毕!!!");
   socket.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}我想把b.txt写到a.txt里面。
可是开始运行服务器端显示:
——》服务器启动!当运行客户端,会出现:服务器启动!
[code=JavaException in thread "Thread-0" java.lang.NullPointerException
        at MultiServer.run(FileServer.java:42)
][/code]运行多几次客户端会显示:服务器启动!
Exception in thread "Thread-0" java.lang.NullPointerException
        at MultiServer.run(FileServer.java:42)
Exception in thread "Thread-1" java.lang.NullPointerException
        at MultiServer.run(FileServer.java:42)
Exception in thread "Thread-2" java.lang.NullPointerException
        at MultiServer.run(FileServer.java:42)
Exception in thread "Thread-3" java.lang.NullPointerException
        at MultiServer.run(FileServer.java:42)
Exception in thread "Thread-4" java.lang.NullPointerException
        at MultiServer.run(FileServer.java:42)
Exception in thread "Thread-5" java.lang.NullPointerException
        at MultiServer.run(FileServer.java:42)
Exception in thread "Thread-6" java.lang.NullPointerException
        at MultiServer.run(FileServer.java:42)
客户端显示:
——》文件发送完毕!-----------------------
客户端是没有问题的,就是服务器端多线程不知道哪里出现问题,请各位高手多多指点,我是新手啊。
多谢各位了。

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【yuanrong303】截止到2008-08-03 04:07:10的历史汇总数据(不包括此帖):
    发帖的总数量:0                        发帖的总分数:0                        每贴平均分数:0                        
    回帖的总数量:29                       得分贴总数量:12                       回帖的得分率:41%                      
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:---------------------结分的百分比:---------------------
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html

    取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=yuanrong303
      

  2.   

    呵呵,你的这一句把自己给害了
    FileOutputStream out = new FileOutputStream(f);      你本意是想给类一级的那个
        private DataInputStream dataIn;
        private FileOutputStream out;赋值的,不小心变成了局部变量了,结果后面的out调用变成了null;解决方法,改成
    out = new FileOutputStream(f); 
      

  3.   

    [img=http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/17.gif][/im