基于socket的上传下载(Java)精简版

摘要:
一个非常简单的例子,没有界面,只有代码。

很简单的一个例子,没有界面只有代码。

服务器端代码

package server;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class AndroidServer implements Runnable {
	private ServerSocket serverSocket = null;
	private DataInputStream is;

	public void run() {
		if (serverSocket == null) {
			try {
				serverSocket = new ServerSocket(5926);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		try {
			Socket socket = serverSocket.accept();
			is = new DataInputStream(new BufferedInputStream(new FileInputStream("D:\\test.mp4"))); // 把需要上传的文件,放入InputStream
			DataOutputStream os = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream())); // 初始化socket的OutputStream
			int count;
			byte[] buffer = new byte[1024];
			while ((count = is.read(buffer, 0, buffer.length)) != -1) { // 把文件放入socket的OutputStream中
				os.write(buffer, 0, count);
			}
			os.flush();
			serverSocket.close();
			socket.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		Thread desktopServerThread = new Thread(new AndroidServer()); // 启动服务
		desktopServerThread.start();
	}
}

客户端代码

import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.net.Socket;

public class test {

	public static void main(String[] args) {
		try {
			Socket socket = new Socket("192.168.0.228", 5926);
			DataInputStream dis = new DataInputStream(socket.getInputStream()); // 获取socket中的InputStream
			DataOutputStream os = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(new File("D:\\fuck")))); // 初始化OutputStream
			int count = 0;
			byte[] buffer = new byte[1024];
			while ((count = dis.read(buffer)) != -1) { // 把socket中的InputStream放入OutputStream
				os.write(buffer, 0, count);
			}
			os.close();
			socket.close(); // 上传完成,关闭socket
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
		}
	}
}

  

免责声明:文章转载自《基于socket的上传下载(Java)精简版》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇创建一个本地CocoaPods库 并在项目中使用该库CCNET+ProGet+Windows Batch搭建全自动的内部包打包和推送及管理平台下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

【转】MUD教程--巫师入门教程4

在MUD中,为了解决定时触发某种现象,一般有两种方法,一种是通过call_out()延时呼叫,另一种就是通过心跳。于是,对于要跨起离线前后的象做牢这类的事,大多都是采用condition。附:由于大多数MUD里的心跳是每两秒调一次,5+random是5至14次,因此可以看出每一个condition被调用的时间是平均19秒。然后它会按照condition的名字...

axios 学习文档

Axios是一个基于承诺的HTTP库,可以在浏览器和node.js中使用。执行POST请求axis.POST.then。接住执行多个并发请求函数getUserAccount(){returnaxios.get;}函数getUserPermissions(){returnaxios.get;}全部承诺。然后axios API可以通过传递相关配置来请求axios...

Nacos开机自启

1.加入玉米片。服务文件vi/lib/systemd/system/nacos.service2.将以下内容写入nacos。服务文件ps:我的nacos路径是/usr/local/nacos[Unit]Description=nacosAfter=network。target[Service]Type=forkingExecStart=/usr/local/...

js学习-es6实现枚举

最近,我大部分时间都在写dart,突然使用了js。我发现js不能直接声明枚举。目录枚举功能对象冻结()符号实现反映了不可更改值的唯一性。请注意,枚举特性枚举值不能重复,也不能修改。Switchcase可以直接判断对象。冻结()对象。方法可以冻结对象。无法更改实现constEnumSex=Object。冷冻枚举性别。人=1;安慰日志;//符号(男性)表示值co...

【Mybatis-Plus】使用updateById()、update()将字段更新为null或者空

我检查了以下项目的配置,发现字段级别设置为NOT_由空引起。2不为空,但默认更新策略为Not_ NULL:解决方案1。设置全局字段策略加:classpath:#字段策略IGNORED:NOT_NULL:NOT_EMPTY:NOT_Null2。为所需字段设置单独的字段策略很麻烦。...

Redis的安装和简单使用

Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。Redis安装1、要安装Redis,首先要获取安装包。这是访问Redis时所需的密码,一般测试情况下可以不用设定密码。再在右侧找到Redis名称的服务,查看...