import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

import org.junit.Test;

//TCP编程实例3,从客户端发送文件到服务器,服务器保存到本地,并返回发送成功给、客户端,并关闭相应的连接
public class TestTCP3 {
@Test
public void client() throws Exception{
//创建一个Socket的对象
Socket s = new Socket(InetAddress.getByName("127.0.0.1"),9898);
//从本地获取一个文件发送给服务端
OutputStream os = s.getOutputStream();
FileInputStream fis = new FileInputStream(new File("/Users/lixiuming/Desktop/商品详情图片/detail-1.jpg"));
byte[] b = new byte[1024];
int len;
while((len = fis.read(b))!=-1){
os.write(b,0,len);
}
s.shutdownOutput();
//接收来自服务端的消息
InputStream is = s.getInputStream();
byte[] b1 = new byte[1024];
int len1;
while((len1 = is.read(b1)) != -1){
String str = new String(b1,0,len1);
System.out.println(str);
}
//关闭相应的流和Socket
is.close();
os.close();
fis.close();
s.close();

}

@Test
public void server() throws Exception{
//创建一个ServerSocket
ServerSocket ss = new ServerSocket(9898);
//调用一个accept,返回一个socket对象
Socket s = ss.accept();
//将从客户端发送来的信息保存到本地
InputStream is = s.getInputStream();
FileOutputStream fos = new FileOutputStream(new File("2.jpg"));
byte[] b = new byte[1024];
int len;
while((len = is.read(b)) != -1){
fos.write(b, 0, len);
}
//“发送成功”的信息反馈给客户端
OutputStream os = s.getOutputStream();
os.write("发送成功".getBytes());
s.shutdownOutput();
//关闭相应的流和socket
os.close();
fos.close();
is.close();
s.close();
ss.close();
}

}

测试时注意:先看服务端,再开客户端

通过TCP实现文件传输的更多相关文章

  1. java实现两台电脑间TCP协议文件传输

    记录下之前所做的客户端向服务端发送文件的小项目,总结下学习到的一些方法与思路. 注:本文参考自<黑马程序员>视频. 首先明确需求,在同一局域网下的机器人A想给喜欢了很久的机器人B发送情书, ...

  2. TCP打开文件传输(客户端code)

    #include <stdio.h>#include <stdlib.h>#include <arpa/inet.h>#include <sys/types. ...

  3. TCP打开文件传输(服务器端并发code)

    #include <stdio.h>#include <stdlib.h>#include <arpa/inet.h>#include <sys/types. ...

  4. QT从入门到入土(九)——TCP/IP网络通信(以及文件传输)

    引言 TCP/IP通信(即SOCKET通信)是通过网线将服务器Server端和客户机Client端进行连接,在遵循ISO/OSI模型的四层层级构架的基础上通过TCP/IP协议建立的通讯.控制器可以设置 ...

  5. Linux网络编程:UDP实现可靠的文件传输

    我们知道,用TCP实现文件传输很简单.相对于TCP,因为UDP是面向无连接.不可靠的传输协议,所以我们需要考虑丢包和后发先至(包的顺序)的问题,所以我们想要实现UDP传输文件,则需要解决这两个问题.方 ...

  6. Go网络文件传输

    流程分析 借助TCP完成文件的传输,基本思路如下: 发送方(客户端)向服务端发送文件名,服务端保存该文件名. 接收方(服务端)向客户端返回一个消息ok,确认文件名保存成功. 发送方(客户端)收到消息后 ...

  7. 艺萌TCP文件传输及自动更新系统介绍(TCP文件传输)(四)

    艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输) 该系统基于开源的networkComms通讯框架,此通讯框架以前是收费的,目前已经免费并开源,作者是英国的,开发时间5年多,框架很稳定. 项 ...

  8. 艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输)(一)

    艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输) 该系统基于开源的networkComms通讯框架,此通讯框架以前是收费的,目前已经免费并开元,作者是英国的,开发时间5年多,框架很稳定. 项 ...

  9. 标准C实现基于TCP/IP协议的文件传输

    上学期集成程序设计的课堂作业,对于理解TCP/IP实现还是挺有帮助的. TCP/IP编程实现远程文件传输在LUNIX中一般都采用套接字(socket)系统调用. 采用客户/服务器模式,其程序编写步骤如 ...

随机推荐

  1. Aizu 2300 Calender Colors(暴力)

    状压以后,直接暴力枚举,2^20约等于1e6,而且满足bitcount = m的状态很少. #include<bits/stdc++.h> using namespace std; +; ...

  2. BZOJ 4128: Matrix

    BZOJ 4128: Matrix 标签(空格分隔): OI BZOJ 大步小步 矩阵 费马小定理 Time Limit: 10 Sec Memory Limit: 128 MB Descriptio ...

  3. PAT (Basic Level) Practise (中文)- 1005. 继续(3n+1)猜想 (25)

    http://www.patest.cn/contests/pat-b-practise/1005 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证 ...

  4. Oracle11g 主机身份证明问题

    oracle 11g的web database control中,进行一些操作需要主机身份证明,比如进行数据备份.数据的导出导入等;这样对于数据库的安全增强了一定的保证.如果我们有进行适当的配置,可以 ...

  5. java算法面试题:写一个Singleton出来

    package com.swift; public class Singleton { public static void main(String[] args) { /* * 写一个Singlet ...

  6. oracle数据库删除表时遇见需要解锁问题

    今天在进行数据清空时,不注意把表锁住了,记录一下解锁过程. 第一步执行 select t2.username,t2.sid,t2.serial#,t2.logon_time from v$locked ...

  7. MySql学习笔记04

    复习 day01 数据库相关: create database db4 character set utf8; show databases; show create database db4; dr ...

  8. 6- vue django restful framework 打造生鲜超市 -完成商品列表页(下)

    Vue+Django REST framework实战 搭建一个前后端分离的生鲜超市网站 Django rtf 完成 商品列表页下 drf中的request和response drf对于django的 ...

  9. js数组删除(splice和delete)

    最近一直在写js的数组,然后就发现了很奇怪的问题,后来才发现了规律. 删除数据的一行,一般有两种方法,一个是splice,一个是delete: splice:删除了数组后,数组的长度会自动变化.用法: ...

  10. PHP使用CURL_MULTI实现多线程采集

    $connomains = array( "http://www.baidu.com/", "http://www.hao123.com/", "ht ...