今天我们将使用一个简单的小Demo模拟网络文件的下载。
我们将会用一道题来讲述网络编程所用到的知识点,问题如下:
利用网络编程内容从客户端向服务端发送一个文件,然后服务端保存在其他地方。
我们首先创建两个java文件,一个用做客户端,一个用做服务端,客户端进行文件上传模拟,服务端进行文件下载模拟。
首先在服务端创建ServerSocket,给定一个端口号。
ServerSocket ss = new ServerSocket(1110);//参数为端口号
System.out.println("等待上线。。。");
端口号是指每一个软件与服务器进行通信的特定“门牌号”,1-1024的端口号大部分为系统内置软件,一般不会使用(可以使用,但一般不用)。
在进行服务端创建后,我们就要在客户端创建Socket用来与服务端进行通信。
Socket client = new Socket("localhost", 1110);
//第一个参数是ip地址,本地可以使用localhost代替,第二个是服务端设置好的端口号
localhost与127.0.0.1在使用过程中都可以代表本机,但是要注意localhost是域名,127.0.0.1是ip地址。
接下来我们就可以进行对io流的操作了,关于io流的操作我们改天会讲,在这里就不做过多的阐述了。具体代码如下
服务端:
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(1110);//设置服务端的端口号
System.out.println("等待上线。。。");
Socket accept = ss.accept();//接受客户传递来的信息
System.out.println("有人上线了!!!");
File f = new File("d:\\1.mp4");//创建保存的地址
InputStream in = accept.getInputStream();
OutputStream out = new FileOutputStream(f);
int len = 0;
byte[] b = new byte[1024];
while((len=in.read(b))!=-1) {
out.write(b);
}
System.out.println("传输完毕");
//最后要注意关闭资源
ss.close();
in.close();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
客户端
public static void main(String[] args) {
try {
Socket client = new Socket("localhost", 1110);//设置访问的ip地址和要访问的端口号
OutputStream out = client.getOutputStream();
File f = new File("C:\\List集合.mp4");//要上传文件的地址
InputStream in = new FileInputStream(f);
String s = "我来充钱了";
int len = 0;
byte[] b = new byte[1024];
while((len = in.read(b))!=-1) {
out.write(b, 0, len);
}
//注意关流
client.close();
out.close();
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
本次只是一个小的Demo,还有许多可以改进的地方,比如关流的实机可以放在finally中,还有文件的位置可以自己选择,这时候就需要使用字符串来分割文件的后缀名等等情况,大家如果有兴趣可以自己尝试的完善。
我是一个正在偷偷努力学习java的大胖子,有任何问题大家都可以发在我的个人公众号上边,我也会尽量帮大家解决,当然,我也只是一个正在学习java的人,并不能保证“每个(其实是大部分问题都不能)”问题都能回答上来。
还有我的个人公众号会不定时更新我的java学习之路,大家如果也在学习java可以在公众号上边与我交流哦。