呵呵,这是第二次给你回答问题了。帮你把代码重构了,你自己体会下吧。你对线程,流的概念理解有点乱。
服务端:
package tcp;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Transfer_Server extends Thread {
int port = 8080;
public void run() {
Socket s = null;
try {
ServerSocket ss = new ServerSocket(port);
while (true) {
s = ss.accept();
String filePath = "D:\\1.JPG";
File fi = new File(filePath);
System.out.println("文件长度:" + (int) fi.length());
System.out.println("建立socket链接");
ObjectOutputStream ps = new ObjectOutputStream(s
.getOutputStream());
ps.writeObject(fi);
ps.flush();
ps.close();
s.close();
System.out.println("文件传输完成");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String arg[]) {
new Transfer_Server().start();
}
}
客户端:
package tcp;
import java.net.*;
import java.io.*;
public class Transfer_Client implements Runnable {
Socket clientsocket = null;
public static void main(String args[]) {
Thread thread = new Thread(new Transfer_Client());
thread.start();
}
public void run() {
try {
clientsocket = new Socket("localhost", 8080);
System.out.println("连接已建立完毕!");
//while (true) {此处代码不能这么写。你对Socket客户端的理解不太妥。
InputStream is = clientsocket.getInputStream();
ObjectInputStream inObject = new ObjectInputStream(is);
File file = (File) inObject.readObject();
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream("D:\\sg.jpg");
byte[] buffer = new byte[1];
while (fis.read(buffer) != -1) {
fos.write(buffer);
}
fos.flush();// 可有可无
fis.close();
fos.close();
//}
} catch (Exception e) {
System.out.println(e);
}
}
}
服务器不能发送给客户端。但你可以会送给客户端,就是用输出流来使用
先运行客户端,再运行服务器,这样行吗?