求助:java socket多线程问题!

yuanrong303 2008-08-03 04:07:07
本程序通过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)


客户端显示:
——》文件发送完毕!

-----------------------
客户端是没有问题的,就是服务器端多线程不知道哪里出现问题,请各位高手多多指点,我是新手啊。
多谢各位了。
...全文
733 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
different_way 2011-06-22
  • 打赏
  • 举报
回复
[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/17.gif][/im
g]
yuanrong303 2008-08-03
  • 打赏
  • 举报
回复
确实是这样,非常感谢!
  • 打赏
  • 举报
回复
2楼 换图象啦?

顶回答
sitych 2008-08-03
  • 打赏
  • 举报
回复
ls起的真早
老紫竹 2008-08-03
  • 打赏
  • 举报
回复
呵呵,你的这一句把自己给害了
FileOutputStream out = new FileOutputStream(f);
你本意是想给类一级的那个
private DataInputStream dataIn;
private FileOutputStream out;
赋值的,不小心变成了局部变量了,结果后面的out调用变成了null;
解决方法,改成
out = new FileOutputStream(f);

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧