Java实现服务端和客户端的通信(文件下载)
网络编程
网络通信的介绍
- 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据
- 两台电脑连在一起就组成了一个计算机网络。我们通过光纤连接到电信的网关,中国电信通过海底光缆和美国电信网关连接,你就是和全世界的在线用户连着
如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数?
TCP/IP 协议
1.三次握手
2.TCP/IP协议
- TCP协议是一种以固连线为基础的协议,它提供两台计算机之间可靠的数据传送。
- TCP可以保证从一端数据传至连接的另一端时,数据能够确实送达。
- TCP协议适合可靠性比较高的场合,就像拨打电话。
接下来我们用简单的例子来介绍从服务器段下载文件;通信流程如下:
- 客户端创建Socket
- 服务端创建ServerSocket
- 客户端绑定服务器ip地址和Socket端口
- 服务端绑定服务器端口
- 客户端请求服务器链接
- 服务端阻塞监听客户端请求
- 客户端连接
- 服务端连接成功返回Socket
- 客户端输入输出流通信
- 服务端通过输入输出流通信
- 客户端关闭流
- 服务端关闭流
- 客户端关闭Socket
- 服务端关闭Socket和ServerSocket
首先我们建立服务端
package server;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.net.ServerSocket;
import java.net.Socket;public class Smain {public static void main(String[] args) {try {//1.服务端创建ServerSocketServerSocket ssk = new ServerSocket(9090);while (true) {//2.服务端阻塞监听客户端请求Socket ck = ssk.accept();//3.创建输入输出流DataInputStream din = new DataInputStream(ck.getInputStream());DataOutputStream dout = new DataOutputStream(ck.getOutputStream());//读取客户端发送的信息int key = din.readInt();String fname = "03.mp4";switch (key) {case 1:fname = "01.mp4";break;case 2:fname = "02.mp4";break;}//读取服务器上对应的mp4文件并用输出流发送给客户端FileInputStream fin = new FileInputStream(fname);byte[] data = new byte[1024*5];while (true) {int len = fin.read(data);if(len == -1) {break;}dout.write(data, 0, len);}dout.close();fin.close();din.close();ck.close();}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
建立客户端
package client;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.net.Socket;
import java.util.Scanner;public class Cmain {public static void main(String[] args) {try {Scanner input = new Scanner(System.in);//1.建立客户端SocketSocket ck = new Socket("192.168.31.13", 9090);//让客户端选择服务器对应的MP4文件编号System.out.println("请输入对应的MP4文件编号:1) 01.mp4;2) 02.mp4; 3)03.mp4;");int key = input.nextInt();//让客户输入下载地址和保存的文件名System.out.println("请输入保存地址以及文件名:");String path = input.next();String name = input.next();DataOutputStream dout = new DataOutputStream(ck.getOutputStream());DataInputStream din = new DataInputStream(ck.getInputStream());//选择的MP4文件编号发送给服务端dout.writeInt(key);//建立文件输入流保存在本地FileOutputStream fout = new FileOutputStream(path+"/"+name);byte[] data = new byte[1024*5];while(true) {int len = din.read(data);if(len == -1) {break;}System.out.println("len:"+len);fout.write(data, 0, len);}fout.close();din.close();dout.close();ck.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
这样我们可以实现简单的从服务器上下载文件的操作
Java实现服务端和客户端的通信(文件下载)相关推荐
- Java中利用socket实现简单的服务端与客户端的通信(中级)——实现任意双向通信
本文计划采用socket实现客户端和服务端的任意双向通信,即客户端可以随时给服务端发消息,服务端也可以随时给客户端发消息,最终结果就是一个类似与QQ的聊天软件的功能. 以下代码可以直接拷贝到Eclip ...
- Java中利用socket实现简单的服务端与客户端的通信(基础级)
在上一篇文章中,简单的介绍了java中入门级的socket编程,简单的实现了客户端像服务器端发送数据,服务器端将数据接收并显示在控制台,没有涉及多线程.上一篇文章的链接:Java中利用socket实现 ...
- java sslsocket程序_JAVA与C++进行sslsocket通信,JAVA做服务端或客户端
前几天有位网友问我关于Unity3D里面使用Protobuf的方法,一时有事拖到现在才写这篇文章,不好意思哈. 本文测试环境: 系统:WINDOWS 7(第3.6步).OS X 10.9(第4步) 软 ...
- Java中利用socket实现简单的服务端与客户端的通信(入门级)
Java编程中,要想要使用网络通信,就离不开Socket编程,在此对socket进行简单的介绍.首先声明,这是一个入门级的介绍,仅仅简单的实现了客户端向服务端发送数据,服务端正常的接收数据,当接收到特 ...
- socket.io服务端是java_SpringBoot(23) 集成socket.io服务端和客户端实现通信
@Slf4j @Service(value = "socketIOService") public class SocketIOServiceImpl implements ISo ...
- SpringBoot(23) 集成socket.io服务端和客户端实现通信
一.前言 websocket和socket.io区别? websocket 一种让客户端和服务器之间能进行双向实时通信的技术 使用时,虽然主流浏览器都已经支持,但仍然可能有不兼容的情况 适合用于cli ...
- java mina 服务端_Mina客户端和服务端代码编写
1.客户端 package com.boonya.protocol; import java.net.InetSocketAddress; import java.nio.charset.Charse ...
- 使用WebSocket实现服务端和客户端的通信
开发中经常会有这样的使用场景.如某个用户在一个数据上做了xx操作, 与该数据相关的用户在线上的话,需要实时接收到一条信息. 这种可以使用WebSocket来实现. 另外,对于消息,可以定义一个类进行固 ...
- 简单的c++服务端与客户端的通信
本篇博客是本人没有深入学习网络通信,对其浅浅的了解了一下,只知道怎么连接以及发送内容,若内容有什么错误的地方还麻烦各位大佬可以指出来大家一起讨论一下. 服务端代码如下: #include < ...
最新文章
- 数据结构,堆和栈和队列的概念
- 下一跳网关和转发接口的使用情况
- linux文件明明存在却无法vim打开_教你几招,让你vim编辑器变得友善起来(特别水,不要点进来)...
- Pool多进程的加速
- 在cds学到的(非技术)
- php python插件,Python:开发Sublime插件,方便PHP开发
- linux之ls只显示文件或者文件夹
- 【LeetCode-SQL每日一练】—— 620. 有趣的电影
- springboot日志写入mysql_springboot运用logback将日志写入数据库
- Java实现简单的文本编辑器
- 手机充当电脑摄像头:无他相机和DroidCam
- [杂记]注册电气工程师考试复习及考试杂谈
- Clouda 之我见
- 串口公头母头: RS232 DB9 公头 母头 串口引脚定义
- c语言流水灯程序 16,16个发光二极管流水灯程序
- 窄带高清赋能体育赛事,世界杯高清直播背后的技术变革
- 基本DOS命令---6.关机重启操作命令
- mysql 中添加和删除字段
- 《人人都是首席质量官》vs “人人都是产品经理” 及心得
- 用echart玩点好玩的--酷炫热力图