本程序通过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)
客户端显示:
——》文件发送完毕!-----------------------
客户端是没有问题的,就是服务器端多线程不知道哪里出现问题,请各位高手多多指点,我是新手啊。
多谢各位了。
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)
客户端显示:
——》文件发送完毕!-----------------------
客户端是没有问题的,就是服务器端多线程不知道哪里出现问题,请各位高手多多指点,我是新手啊。
多谢各位了。
楼主【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
FileOutputStream out = new FileOutputStream(f); 你本意是想给类一级的那个
private DataInputStream dataIn;
private FileOutputStream out;赋值的,不小心变成了局部变量了,结果后面的out调用变成了null;解决方法,改成
out = new FileOutputStream(f);
Plugin/003/onion/17.gif][/im