那些年的 网络通信之 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请求 ...
随机推荐
- Js_字体滚动换颜色
<html><head><meta http-equiv="Content-Type" content="text/html; charse ...
- python类属性在继承中的修改的影响
class A(object): x = 1 class B(A): pass class C(A): pass # 通过父类修改类属性,子类继承的类属性也改变 A.x = 3 print(A.x, ...
- 【助教】浅析log4j的使用
有不少童鞋私信我一些在写代码时候遇到的问题,但是无法定位问题出在哪里,也没有日志记录,实际上,写日志是开发项目过程中很重要的一个环节,很多问题都可以从日志中找到根源,从而定位到出错位置,为解决问题提供 ...
- asp.net简述Web Forms开发模式
详情请查阅:http://www.runoob.com/aspnet/aspnet-intro.html 1.Web Forms 是三种创建 ASP.NET 网站和 Web 应用程序的编程模式中的一种 ...
- Alpha发布评价
1.奋斗吧兄弟组 食物链系统 是一个比较成熟的工具,可以应用于生物课程的辅助讲解,具有很强的软件目的性和实用性. 2.Newbee 俄罗斯方块 因为选了很经典的游戏,所以在创新上下了一定功夫,可是没有 ...
- 移动硬盘插到台式机,外接网卡无法连接wifi处理
在网上买了一个希捷500G的移动硬盘,避免供电不足,硬盘需要插到台式机后面,高高兴兴的通过USB连接了,发现硬盘可以用,然后打算网上查询是否正品,发现不能连接网络了,我是台式机,用360wifi作为无 ...
- multer详解
Express默认并不处理HTTP请求体中的数据,对于普通请求体(JSON.二进制.字符串)数据,可以使用body-parser中间件.而文件上传(multipart/form-data请求),可以基 ...
- Angular中ui-grid的使用详解
Angular中ui-grid的使用 在项目开发的过程中,产品经理往往会提出各种需求,以提高用户体验.最近,项目中用到的表格特别多,而且表格的列数和行数也超多.为了让用户浏览更爽,产品经理提出,当表格 ...
- java学习之switch 等值判断
当匹配到相等的值时候 则进入case里面执行语句 当该语句有break时候 则退出匹配 当没有break时候 则继续往下匹配 直到遇到break才停止匹配
- We Need More Bosses CodeForces - 1000E(缩点 建图 求桥 求直径)
题意: 就是求桥最多的一条路 解析: 先求连通分量的个数 然后缩点建图 求直径即可 #include <bits/stdc++.h> #define mem(a, b) memset(a ...