java如何实现客户端向服务器端传送一个图片的代码,详细一点,最好能有注释,新手求解
public class SocketTest extends Thread {
private Socket so;
private DataInputStream in;
public static void main(String[] args) {
SocketTest app = new SocketTest();
appstartup();
}
public void startup() {
try {
// 创建服务端socket对象并指定监听端口
ServerSocket ss = new ServerSocket(9999);
Systemoutprintln("listening");
// 等待客户端连接
so = ssaccept();
Systemoutprintln("connected");
// 开始读取数据
start();
} catch (Exception e) {
eprintStackTrace();
}
}
public void run() {
try {
// 创建socket输入流
in = new DataInputStream(sogetInputStream());
while (true) {
try {
// 定义接收缓冲区(64字节)
byte[] buf = new byte[64];
// 将数据读到接收缓冲区中,并返回实际读到的数据长度
int len = inread(buf, 0, 64);
// 长度为-1说明到达输入流末尾,socket已关闭
if (len < 1) {
Systemoutprintln("closed");
break;
}
Systemoutprintln("(" + len + ")");
} catch (Exception e) {
// 读数据异常
eprintStackTrace();
}
}
} catch (Exception e) {
// 监听异常
eprintStackTrace();
}
}
}
向压缩包里添加文件时直接把服务器上的文件用流读进来就行,不用非把文件放到同一个目录,用程序生成压缩包和用命令行工具是不一样的,不要想当然。 写了个示例程序,你可以参考一下。这个示例不使用临时文件,把 OutputStream os替换成你下载用的输出流就可以实现一边压缩一边下载。注意javautilzip不支持非ascii文件名。想支持中文文件名可以用apache ant或其他的库。
import javaio;
import javautilzipZipEntry;
import javautilzipZipOutputStream;
public class ZipTest {
public static void main( String[] args ) {
try {
writeZip();
} catch ( IOException e ) {
eprintStackTrace();
}
}
private static void writeZip() throws IOException {
String[] files = { "/ws/dir1/file1", "/ws/dir2/file2", "/ws/file3", "/pub/successwav" };
OutputStream os = new BufferedOutputStream( new FileOutputStream( "/ws/archivezip" ) );
ZipOutputStream zos = new ZipOutputStream( os );
byte[] buf = new byte[8192];
int len;
for ( String filename : files ) {
File file = new File( filename );
if ( !fileisFile() ) continue;
ZipEntry ze = new ZipEntry( filegetName() );
zosputNextEntry( ze );
BufferedInputStream bis = new BufferedInputStream( new FileInputStream( file ) );
while ( ( len = bisread( buf ) ) > 0 ) {
zoswrite( buf, 0, len );
}
zoscloseEntry();
}
zosclose();
}
}
0条评论