那些年的 网络通信之 TCP/IP 传输控制协议 ip 加 端口 客户端上传文件到服务器端服务器端返回上传成功消息
import java.io.*;
import java.net.*;
class UpLoadDemo{
public static void main(String [] args) throws Exception{
int port=10085;
String ipAddr="192.168.20.1";
String srcFilePath="C:\\Users\\Ghc\\Desktop\\psb.jpg";
String destFilePath="C:\\Users\\Ghc\\Desktop\\test\\psb2.jpg";
new Thread(new UploadServer(new ServerSocket(port),destFilePath)).start();
new Thread(new UploadClient(new Socket(ipAddr,port),srcFilePath)).start();
}
} class UploadClient implements Runnable{
private Socket socket;
private BufferedInputStream socketBufIn,fileBufIn;
private BufferedOutputStream socketBufOut;
private String filePath; private int len=-1;
private byte [] buf=new byte[1024]; UploadClient(Socket socket,String filePath){
this.socket=socket;
this.filePath=filePath;
}
public void run(){
try{ fileBufIn=new BufferedInputStream(new FileInputStream(filePath));
socketBufIn=new BufferedInputStream(socket.getInputStream());
socketBufOut=new BufferedOutputStream(socket.getOutputStream()); while((len=fileBufIn.read(buf))!=-1){
socketBufOut.write(buf,0,len);
socketBufOut.flush();
}
socket.shutdownOutput(); len=socketBufIn.read(buf);
System.out.println("server: "+new String(buf,0,len)); }
catch(Exception e){
e.printStackTrace();
}
finally{
if(fileBufIn!=null)
try{
fileBufIn.close();
fileBufIn=null;
} catch(Exception e){
e.printStackTrace();
}
if(socket!=null)
try{
socket.close();
socket=null;
} catch(Exception e){
e.printStackTrace();
}
}
}
} class UploadServer implements Runnable{
private ServerSocket serverSocket;
private Socket socket;
private String destFilePath;
private BufferedInputStream socketBufIn;
private BufferedOutputStream socketBufOut;
private BufferedOutputStream fileBufOut;
private int len=-1;
private byte[] buf=new byte[1024]; UploadServer(ServerSocket serverSocket,String destFilePath){
this.serverSocket=serverSocket;
this.destFilePath=destFilePath;
} public void run(){
try{
fileBufOut=new BufferedOutputStream(new FileOutputStream(destFilePath));
socket=serverSocket.accept();
socketBufIn=new BufferedInputStream(socket.getInputStream());
socketBufOut=new BufferedOutputStream(socket.getOutputStream());
System.out.println("ip: "+socket.getInetAddress().getHostAddress()+"connected!");
while((len=socketBufIn.read(buf))!=-1){
fileBufOut.write(buf,0,len);
fileBufOut.flush();
}
socketBufOut.write("File uploaded Successfully! ".getBytes());
socketBufOut.flush();
//socket.shutdownInput();
}
catch(Exception e){
e.printStackTrace();
}
finally{
if(fileBufOut!=null)
try{
fileBufOut.close();
fileBufOut=null;
}
catch(Exception e){
e.printStackTrace();
}
if(serverSocket!=null)
try{
serverSocket.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
}
效果图:

那些年的 网络通信之 TCP/IP 传输控制协议 ip 加 端口 客户端上传文件到服务器端服务器端返回上传成功消息的更多相关文章
- 那些年的 网络通信之 TCP/IP 传输控制协议 ip 加 端口 ---
/* 一个文本小写转换为大写的小程序,当客户端从键盘录入一串字符串发送到服务端服务端转换为大写返回给客户端 */ import java.io.*; import java.net.*; class ...
- 《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(1)-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(2)-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- TCP(传输控制协议)和三次握手和四次断开
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机网络OSI模型中, ...
- TCP (传输控制协议)
http://baike.baidu.com/item/TCP/33012?fr=aladdin TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可 ...
- 三、 TCP(传输控制协议)
它建立在网际层协议(IP)提供的数据包传输技术之上,.TCP使应用程序可使用连续的数据进行通信.除非由于网络故障导致连接中断或冻结,TCP都能保证数据流完好地传输.而不会发生丢包 ,重包或是乱序的问题 ...
- TCP(传输控制协议)
三次握手tcp是一种面向链接的.可靠的.基于字节流的传输层通信协议,提供可靠的连接服务,采用三次握手确认建立一个连接.位码即tcp标志位,有6种标示:1.SYN(synchronous建立连接)2.A ...
- TCP,UDP,IP总结
一.传输层的主要功能是什么? 分割并重新组装上层提供的数据流,为数据流提供端到端的传输服务. 二.传输层如何区分不同应用程序的数据流? 因为,对应传输层而言,它只需要知道目标主机上的哪个服务程序来响应 ...
- 浅谈Http、TCP、UDP和 IP 的的区别
应用层:Http,超文本传输协议(HyperText Transfer Protocal):利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议.客户端使用Web浏览器发起HTTP请求 ...
随机推荐
- debug 在windows下的使用
debug是什么? debug是一款windows和DOS系统下的一款软件,其最早可追溯到1937年的"马克1号"(具体度娘):早期debug主要在DOS和windows系统中,它 ...
- VS2010带不出System.Data.OracleClient这个引用的解决方案
在使用VS2010的时候有时会带不出System.Data.OracleClient这个引用,可以使用以下解决方法: 右击项目的属性,在弹出窗口中有一个“目标框架”下拉框选项,默认会是.NET FRA ...
- LintCode——第K大元素
第K大元素:在数组num中找到第k大的元素(可以交换数组中的元素的位置) 样例: 数组 [9,3,2,4,8],第三大的元素是 4 数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4 ...
- linux一切皆文件之块设备文件(四)
一.知识准备 1.在linux中,一切皆为文件,所有不同种类的类型都被抽象成文件(比如:块设备,socket套接字,pipe队列) 2.操作这些不同的类型就像操作文件一样,比如增删改查等 3.块设备是 ...
- error: Build input file cannot be found: '*******/node_modules/react-native/Libraries/WebSocket/libfishhook.a' 问题解决记录
解决了刚才的'config.h' file not found问题,本以为就可以顺畅的跑起来,谁知道又被恶心到了,Build input file cannot be found!!! 问题: err ...
- PAT甲题题解-1095. Cars on Campus(30)-(map+树状数组,或者模拟)
题意:给出n个车辆进出校园的记录,以及k个时间点,让你回答每个时间点校园内的车辆数,最后输出在校园内停留的总时间最长的车牌号和停留时间,如果不止一个,车牌号按字典序输出. 几个注意点: 1.如果一个车 ...
- android开发心得之知识的量变到质变
随着身边越来越多的人开始了尝试android开发,看着他们一点点学期 从nodepad++写代码 cmd 执行,到安装eclipse 和android SDK,仿佛看到了昨天的我一样,一样勤勤恳恳的学 ...
- ElasticSearch 2 (24) - 语言处理系列之停用词:性能与精度
ElasticSearch 2 (24) - 语言处理系列之停用词:性能与精度 摘要 在信息检索早期,磁盘和内存相较我们今天的使用只是很小的一部分.将索引空间保持在一个较小的水平是至关重要的,节省每个 ...
- 应对Gradle联网问题、长时间卡在resolve dependencies的思路
1.出现这种情况,在首先考虑网络问题,依赖下载不下来尝试shadowsocks,未果. 2.检查防火墙问题,更换host,无法解决. 3.新建Gradle工程,依然卡在resolve dependen ...
- 2017全球GDP总量达74万亿美元 各国占比排行榜
全球GDP总量达74万亿美元 各国占比排行榜 2017年公布的2015年全球各国GDP占比,数据图片来源:世界银行报告 2月24日,来自世界银行的最新GDP数字已于2月早些时候公布,现由How ...