程序功能:

客户端向服务器发送一个本地磁盘中的文件, 服务器程序接受后保存在其他位置.

客户端实现步骤:

  1. 创建一个客户端对象Socket,构造方法中绑定服务器的IP地址 和 端口号
  2. 使用Socket对象中的方法 getOutputSteam()获取网络字节输出流OutputStream对象
  3. 使用字节输出流OutputStream对象中的write()方法,给服务器发送数据
  4. 使用Socket对象中的getInputStream()获取网络字节输入流InputStream()对象  
  5. 使用网络字节输入流InputStream对象中的read()方法,读取服务器回写的数据.
  6. 释放Socket资源.
 import java.io.*;
import java.net.Socket; public class TCPClient {
public static void main(String[] args) throws IOException {
//1.创建一个客户端对线Socket,构造方法中绑定服务器的IP地址和端口号
Socket socket = new Socket("127.0.0.1",8888);
// Socket socket = new Socket("192.168.15.132",8888);
//2.使用Socket对象中的方法getOutputStream(0获取网络字节输出流OutputSteam对象
//这个流是个网络流,指向了服务器
OutputStream os = socket.getOutputStream();
File f = new File("E:\\图片\\桌面图片\\宋民国\\222.jpg");
FileInputStream fis = new FileInputStream(f);
byte[] bs = new byte[1024];
int len;
while((len=fis.read(bs))!=-1)
{
//3.使用字节输出流OutputSteam对象中的方法write,给服务器发送数据
os.write(bs,0,len);
}
//告诉服务器关闭输出
socket.shutdownOutput();
fis.close(); //4.使用Socket对象中的方法getInputSteam()获取网络字节输入流InputSteam()对象
InputStream is = socket.getInputStream();
//5.使用网络字节输入流InputSteam对象中的方法read,读取服务器回写的数据
byte[] list = new byte[1024];
int len1 = is.read(list);
String str1 = new String(list,0,len1);
//6.释放资源(Socket)
System.out.println(str1);
socket.close();//只用关socket就行了 }
}

服务器端实现步骤:

  1. 创建一个服务器对ServerSocket对象和指定的端口号一致.
  2. 使用ServerSocket对象中的accept方法,获取请求的客户端对象Socket
  3. 使用Socket对象中的getInputSream()方法
  4. 使用网络字节输入流InputStream对象中的read()方法
  5. 使用Socket对象中的getoutputStream()方法
  6. 使用网络字节输出流OutputSteam对象中的write()方法
  7. 释放资源.
 import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random; public class TCPServer {
public static void main(String[] args) throws IOException { //method01();
method02(); }
public static void method02() throws IOException{
// 1.创建一个服务器对ServerSocket对象和指定的端口号要一致.
ServerSocket serverSocket = new ServerSocket(8888);
while(true) {
//2.使用ServerSocket对象中的的方法accept,获取到请求的客户端对象Scoket
// 创建多线程,提高可以同时与多个客户端进行数据的传输,提高效率
Socket socket = serverSocket.accept();//阻塞(如果没有客户端连接,程序会停止在这个地方)
new Thread(() -> {
try {
//获得客户端Socket对象
//给保存的文件设置随机名,避免覆盖
long time = System.currentTimeMillis();
//3.使用Socket对象中的方法getInputSteam() 获得输入流
InputStream is = socket.getInputStream();
FileOutputStream fos = new FileOutputStream(new File("C:\\123\\123", time + ".jpg"));
byte[] list = new byte[1024];
int len;
//4.使用网络字节输入流InputStream对象中的read()方法
while ((len = is.read(list)) != -1) {
fos.write(list, 0, len);
}
fos.close();
//5. 使用Socket对象中的getoutputStream()方法获得输出流
OutputStream os = socket.getOutputStream();
//6.使用网络字节输出流OutputSteam对象中的write()方法
os.write("你好,图片传输完毕".getBytes()); //7. 释放资源
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}).start(); }
}
public static void method01() throws IOException { //1.创建一个服务器对ServerSocket对象和系统指定的端口号要一致.
ServerSocket server = new ServerSocket(8888);
/*让服务器一直处于监听状态(死循环accept方法)
* 有一个客户端上传文件,就保存一个文件.
* */
while (true){
/* 在步骤1 与 步骤2 之间会卡主, 等待客户端连接,连接了才会进行下一步*/ //2.使用ServerSocket对象中的的方法accept,获取到请求的客户端对象Scoket
Socket socket = server.accept(); //3.使用Socket对象中的方法getInputSteam()
// 得到一个输入流,该输入流就可以调用read()方法
InputStream is = socket.getInputStream();
// 4.使用网络字节输入流InptuSteam对象中的read //文件夹 在是定文件夹下创建文件
File dir = new File("C:\\123\\123");
/* //自动生成一个时间戳,自动生成文件名,利用毫秒值当做文件名
* 用System.currentTimeMilis()方法获取当前系统的毫秒值,
* 再加上一个随机数. 保证文件名是不重复的.
* */
long time = System.currentTimeMillis();
String filename =time+new Random().nextInt(1000)+"";
/*如果该文件夹不存在,则生成这个文件夹*/
if(!dir.exists()){
dir.mkdirs();
}
/**/
FileOutputStream fos = new FileOutputStream(new File(dir,filename+".jpg")); // FileOutputStream fos = new FileOutputStream(destination);
byte[] bs = new byte[1024];
int len;
while((len=is.read(bs))!=-1)
{
fos.write(bs,0,len);
}
//告诉
fos.close(); //5.使用Socket对象中的方法 getoutputSteam 回写 收到了就谢谢.
//利用网络指向客户端.往客户端回写数据.
OutputStream os = socket.getOutputStream();
//都是字节流,转换为字节再写回去.
os.write("收到谢谢".getBytes());
/*socket.close(); server.close();*/ } }
}

运行结果:

JAVA实现C/S结构小程序的更多相关文章

  1. Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战

    Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战 说明:Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战,优惠券是一种常见的促销方式,在规定的周期内购买对应商品类型和额度的商品 ...

  2. Java生鲜电商平台-小程序或者APP拼团功能设计与架构实战

    Java生鲜电商平台-小程序或者APP拼团功能设计与架构实战 说明:Java生鲜电商平台拼团是拉新引流的利器,将拼团运用到极致的就是拼多多,前期通过选取性价比高.实用性强的商品进行拼团,在社交圈(主要 ...

  3. java多线程实现卖票小程序

    package shb.java.demo; /** * 多线程测试卖票小程序. * @Package:shb.java.demo * @Description: * @author shaobn * ...

  4. 基于JAVA网络编程的聊天小程序

    package com.neusoft.edu.socket; import java.io.BufferedReader; import java.io.IOException; import ja ...

  5. appium+java(五)微信小程序自动化测试实践

    前言: 上一篇<appium+java(四)微信公众号自动化测试实践>中,尝试使用appium实现微信公众号自动化测试,接着尝试小程序自动化,以学院小程序为例 准备工作 1.java-cl ...

  6. java实现课堂随机点名小程序

    通过jdbc连接数据库实现读取学生花名册进行随机点名! ~jdbc连接mysql数据库  ||  注释部分代码可通过读取.txt文档实现显示学生信息 ~通过点击开始按钮实现界面中间标签不断更新学生信息 ...

  7. java服务端实现微信小程序内容安全

    请参考微信官方文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.i ...

  8. 统计文件夹下java代码行数的小程序--主要是学习任务队列的思想

    首先感谢czbk的老师,录制的视频,让我们有这么好的学习资料.……—— 统计文件夹java文件的行数,首先想到的肯定是用递归的方法,因为文件夹下面可能包含文件夹,用递归的方法,代码容易写.(这和写简单 ...

  9. 微信小程序学习笔记(2)--------框架之目录结构

    框架提供了自己的视图层描述语言 wxml 和 WXSS,以及基于 JavaScript 的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件系统. 一.响应的数据绑定 框架的核心是一个响应的数据绑定 ...

随机推荐

  1. LeetCode算法题-Next Greater Element I(Java实现)

    这是悦乐书的第244次更新,第257篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第111题(顺位题号是496).你有两个数组(没有重复)nums1和nums2,其中nu ...

  2. 【English Email】CIP payouts now in Workday

    simplification简化的[ˌsɪmplɪfɪˈkeɪʃn] quota配额[ˈkwoʊtə]  regional区域的[ˈriːdʒənl]  mechanics技工[məˈkænɪks]  ...

  3. 【Linux基础】查看某一端口是否开放(1025为例)

    1.使用lsof 命令来查看端口是否开放 lsof -i:1025 //如果有显示说明已经开放了,如果没有显示说明没有开放 lsof(list open files)是一个列出当前系统打开文件的工具. ...

  4. Use of Recv-Q and Send-Q

    From my man page: Recv-Q Established: The count of bytes not copied by the user program connected to ...

  5. localStorage和sessionStorage数据存储

    var arr=[]; for(var i=0;i<4;i++){ arr[i]=i+i; } console.log(arr.toString()); //将json数据转化为字符串 var ...

  6. yum makecache

    $ yum makecache 就是把服务器的包信息下载到本地电脑缓存起来,makecache建立一个缓存,以后用install时就在缓存中搜索,提高了速度.配合yum -C search xxx使用 ...

  7. shell杀死指定端口的进程

    杀死端口代码如下: lsof -i: kill - PID 上面的与下面的代码作用相同. 命令如下所示(这种方式更自动化): kill - $(netstat -nlp | grep : | awk ...

  8. vc图像合成

    本程序下载地址: 上一篇讲述了tiff格式图片拆分成多张图片, 这篇博客讲述如何把多张任意格式的图片合成为一张图片. 图像合成仍然需要借助Cximage图像库,合成函数为Mixfrom, 函数原型为: ...

  9. HTML页面全屏/退出全屏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. C++ 中 auto 与 decltype 的用法与区别

    最近在恶补 C++ 知识的时候,学习到了一些 C++11 标准的新特性,利用这些新特性,我们能够更快地提高编程效率,从而实现我们的目标,在此特意记下学习过程中所学习到的一些东西,方便日后的回顾和复习. ...