服务器端:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServerDemo {
public static void main(String[] args) throws IOException {
// 创建服务端套接字
ServerSocket ss = new ServerSocket(7788);
// 接收客户端连接过来的套接字
Socket s = ss.accept();
// 读取客户端套接字中的数据
InputStream is = s.getInputStream();
// 读取文件名的字节数组的长度
byte i = (byte)is.read();
// 获取文件名的字节数组
byte[] fileNameBys = new byte[i];
is.read(fileNameBys);
// 创建字节输出流
FileOutputStream fos = new FileOutputStream("F:\\workspace\\" + new String(fileNameBys));
byte[] bys = new byte[1024];
int len;
while ((len = is.read(bys)) != -1){
fos.write(bys, 0, len);
}
// 告诉客户端写入完毕
s.shutdownOutput();
fos.close();
ss.close();
}
}
客户端:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class SendFileDemo {
public static void main(String[] args) throws IOException {
// TCP的客户端,要发送文件给服务器
// 创建套接字
Socket s = new Socket("localhost",7788);
// 套接字的输出流
OutputStream os = s.getOutputStream();
// 创建文件对象
File file = new File("F:\\Day15am.zip");
// 写入文件名的字节数组的长度
os.write(file.getName().getBytes().length);
// 写入文件名的字节数组
os.write(file.getName().getBytes());
// 读取需要发送文件内容
FileInputStream fis = new FileInputStream(file);
byte[] bys = new byte[1024];
int len;
while ((len = fis.read(bys)) != -1){
// 输出到sokcet连接管道中
os.write(bys, 0, len);
}
// 告诉服务端数据发送完毕
s.shutdownOutput();
fis.close();
s.close();
}
}