最近要用java写个服务器,初步设想传输一下几种类型:
1、字符串, 2、文件, 3、数据类型(数据库结构,可能只能用arrlist传输),4、对象
问题一:以前穿文件的时候,习惯性用以下代码:
1、字符串, 2、文件, 3、数据类型(数据库结构,可能只能用arrlist传输),4、对象
问题一:以前穿文件的时候,习惯性用以下代码:
import java.io.*;
import java.net.*;
public class FileServer{
public static void main(String[] args)throws Exception{
//创建文件流用来读取文件中的数据
File file=new File("C:\Users\admin\Desktop\navicat112_mysql_en_x64.exe");
FileInputStream fis=new FileInputStream(file);
//创建网络服务器接受客户请求
ServerSocket ss=new ServerSocket(8888);
Socket client=ss.accept();
//创建网络输出流并提供数据包装器
DataOutputStream dos=new DataOutputStream(client.getOutputStream());
//创建文件读取缓冲区
byte[] buf=new byte[2048];
int num;
while((num=fis.read(buf))!=-1){//能否读完文件
dos.write(buf,0,num);//把文件数据写出网络缓冲区
dos.flush();//刷新缓冲区把数据写往客户端
}
fis.close();
dos.close();
}
}
import java.io.*;
import java.net.*;
public class FileClient{
public static void main(String[] args)throws Exception{
//使用本地文件系统接受网络数据并存为新文件
File file=new File("D:\temp.exe");
file.createNewFile();
RandomAccessFile raf=new RandomAccessFile(file,"rw");
// 通过Socket连接文件服务器
Socket server=new Socket("127.0.0.1",8888);
//创建网络接受流接受服务器文件数据
DataInputStream in=new DataInputStream(server.getInputStream());
//创建缓冲区缓冲网络数据
byte[] buf=new byte[2048];
int num;
while((num=in.read(buf))!=-1){//能否读完全部数据
raf.write(buf,0,num);//将数据写往文件
raf.skipBytes(num);//顺序写文件字节
//num=in.read(buf);//继续从网络中读取文件
}
in.close();
raf.close();
}
}
发现假如把DataInputStream 用close()关闭后,scoket也会关闭,但是不关闭有些文件,例如x.exe又传输不完(大部分文本文件是可以的),所以就考虑新用一个端口,再起一个socket单单负责传输文件,但是这样好像有弊端..请各位大神指点。
2、数据集问题,深受.net C#影响…上来想直接序列化resultset…才发现本人太年轻了,有关数据传输这方面怎么传输,还得讨教一下大家,谢谢!
解决方案
40
Java里只有对象,没有结构,可以把对象或ArrayList拼接成JSON格式的字符串然后传输。
文件传输你可以去了解下Apache的fileupload相关的类库。
文件传输你可以去了解下Apache的fileupload相关的类库。