TCP实现连接传输案例
使用的类
ServerSocket 服务器端
构造方法:ServerSocket(端口号); 接收端使用
方法:accept(); 返回一个 Socket对象
getInetAddress();返回发送端的地址 InetAddress对象
Socket 客户端 发送端
构造方法:
Socket(IP地址,端口号);
Socket(主机名,端口号);
方法:
getPort();返回端口号
getLocalAddress();获取Socket对象绑定的本地IP地址
getInputStream();获取一个输入对象
getOutputStream();获取一个输出对象
1 服务器端创建:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class TCPSERver {
public static void main(String[] args) throws IOException {
ServerSocket ss=new ServerSocket();
Socket sk=ss.accept();
InputStream is=sk.getInputStream();
File f=new File("D:\\test\\d");
//判断服务器相对的文件夹是否存在
if(!f.exists())
{
f.mkdir();
}
//文件名改为域名+毫秒值+6位随机数
String filename="zys"+System.currentTimeMillis()+new Random().nextInt();
String path=f.getAbsolutePath()+File.separator+filename+".txt";
FileOutputStream fo=new FileOutputStream(path);
byte[] b=new byte[];
int len=;
while((len=is.read(b))!=-)
{
fo.write(b,,len);
} //回复客户端
OutputStream out=sk.getOutputStream();
out.write("上传成功".getBytes());
//释放
ss.close();
fo.close(); }
}
1 创建客户端:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random; public class TCPSERver {
public static void main(String[] args) throws IOException {
ServerSocket ss=new ServerSocket();
Socket sk=ss.accept();
InputStream is=sk.getInputStream();
File f=new File("D:\\test\\d");
//判断服务器相对的文件夹是否存在
if(!f.exists())
{
f.mkdir();
}
//文件名改为域名+毫秒值+6位随机数
String filename="zys"+System.currentTimeMillis()+new Random().nextInt();
String path=f.getAbsolutePath()+File.separator+filename+".txt";
FileOutputStream fo=new FileOutputStream(path);
byte[] b=new byte[];
int len=;
while((len=is.read(b))!=-)
{
fo.write(b,,len);
} //回复客户端
OutputStream out=sk.getOutputStream();
out.write("上传成功".getBytes());
//释放
ss.close();
fo.close(); }
}
其他案例:
服务器使用多线程实现多人传送文件
将服务器实现代码实现Runnable接口
重写run方法,封装到run方法中 此代码中的ServerSocket ss=new ServerSocket();接收文件语句封装到实现类中
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket; public class Demo1 {
public static void main(String[] args) throws IOException {
ServerSocket ss=new ServerSocket();
//死循环一直接受客户端
while(true)
{
Socket sk=ss.accept();
MyRunnable mr=new MyRunnable(sk);
new Thread(mr).start(); } }
} import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Random; public class MyRunnable implements Runnable{
private Socket sk; public MyRunnable(Socket sk)
{
this.sk=sk;
} public void run() {
FileOutputStream fo=null;
InputStream is=null;
try{
is=sk.getInputStream();
File f=new File("D:\\test\\d");
if(!f.exists())
{
f.mkdir();
}
//文件名改为域名+毫秒值+6位随机数
String filename="zys"+System.currentTimeMillis()+new Random().nextInt();
String path=f.getAbsolutePath()+File.separator+filename+".txt";
fo=new FileOutputStream(path);
byte[] b=new byte[];
int len=;
while((len=is.read(b))!=-)
{
fo.write(b,,len);
} //回复客户端
OutputStream out=sk.getOutputStream();
out.write("上传成功".getBytes()); }catch(IOException ex){
ex.printStackTrace();
}finally{
try {
fo.close();
} catch (IOException e) { e.printStackTrace();
}
} } }
TCP实现连接传输案例的更多相关文章
- socket套接字TCP协议传输-案例测试
术语: 套接字接口:socket,是一个IP地址和一个端口号的组合,套接字可以唯一标识整个Internet中的一个网络进程. TCP连接:一对套接字接口(一个用于接收,一个用于发送)可定义面向连接的协 ...
- SQL Server 连接问题案例解析(1)
SQL Server 连接问题案例解析(1) 转载自:http://blogs.msdn.com/b/apgcdsd/archive/2015/04/27/sql.aspx?CommentPosted ...
- TCP与UDP传输协议
目录结构: contents structure [-] 1 TCP协议和UDP协议的比较 1.1 TCP协议 TCP的全称是Transmission Control Protocol (传输控制协议 ...
- 不仅仅是百万级TCP长连接框架 t-io
t-io: 不仅仅是百万级TCP长连接框架 t-io是基于jdk aio实现的易学易用.稳定.性能强悍.将多线程运用到极致.内置功能丰富的即时通讯框架(广义上的即时通讯,并非指im),字母 t 寓意t ...
- 性能分析之TCP全连接队列占满问题分析及优化过程(转载)
前言 在对一个挡板系统进行测试时,遇到一个由于TCP全连接队列被占满而影响系统性能的问题,这里记录下如何进行分析及解决的. 理解下TCP建立连接过程与队列 从图中明显可以看出建立 TCP 连接的时候, ...
- TCP/IP连接状态
1.建立连接协议(三次握手)(1)客户端发送一个带SYN标志的TCP报文到服务器.这是三次握手过程中的报文1.(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN ...
- 网络层、传输层、应用层、端口通信协议编程接口 - http,socket,tcp/ip 网络传输与通讯知识总结
引: http://coach.iteye.com/blog/2024511 什么是TCP和UDP,以及二者区别是什么? TCP的全称为传输控制协议.这种协议可以提供面向连接的.可靠的.点到点的通信. ...
- Http 和TCP的关系,TCP长连接和短连接有什么区别?
HTTP 协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用.由于HTTP在 ...
- 用wireshark抓包分析TCP三次握手、四次挥手以及TCP实现可靠传输的机制
关于TCP三次握手和四次挥手大家都在<计算机网络>课程里学过,还记得当时高超老师耐心地讲解.大学里我遇到的最好的老师大概就是这位了,虽然他只给我讲过<java程序设计>和< ...
随机推荐
- 用数据说话,R语言有哪七种可视化应用?
今天,随着数据量的不断增加,数据可视化成为将数字变成可用的信息的一个重要方式.R语言提供了一系列的已有函数和可调用的库,通过建立可视化的方式进行数据的呈现.在使用技术的方式实现可视化之前,我们可以先和 ...
- Codeforces Round #623 (Div. 2, based on VK Cup 2019-2020 - Elimination Round, Engine) C. Restoring
C. Restoring Permutation time limit per test1 second memory limit per test256 megabytes inputstandar ...
- Cypress 自动化环境搭建
1.Cypress 下载: 官网下载,下载后直接解压即可,解压后便可单机 exe 文件打开 Ps:直接打开 exe 是会报错找不到 json文件的,所以还要安装依赖环境 运行 cypress 项目前, ...
- RF(作用与目的)
1.robotframework 自动化原理 通过 ride 工具编写脚本,加载指定的 UI 测试库,再通过 pybot 程序去运行指定脚本,调用浏览器驱动,打开浏览器,操作浏览器页面元素,达到模拟用 ...
- Linux之《荒岛余生》(一)准备篇
xin片之争,已经暴露了中国xin的问题,我等码农束手无策:而在操作系统方面,成果也是乏善可陈:现如今酷炫的Web监控工具,让很多研发丧失了真正处理问题的能力. 越接近底层,就越接近真相,在计算机的世 ...
- Spring Cloud 学习 之 Spring Cloud Ribbon(基础知识铺垫)
文章目录 1.负载均衡: 2.RestTemplate详解: xxxForEntity/xxxForObject:主要介绍get跟post exchange: execute源码分析: 1.负载均衡: ...
- python 读hdf4文件,再转写成一个tif文件
1.安装pyhdf包 (1)通过此链接查找并下载pyhdf包:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame(根据自己的系统及python版本选择 ...
- 【Hadoop离线基础总结】Hadoop High Availability\Hadoop基础环境增强
目录 简单介绍 Hadoop HA 概述 集群搭建规划 集群搭建 第一步:停止服务 第二步:启动所有节点的ZooKeeper 第三步:更改配置文件 第四步:启动服务 简单介绍 Hadoop HA 概述 ...
- Ubuntu系统make menuconfig的依赖包ncurses安装
Linux内核或者u-boot进行make menuconfig的时候,如果系统上没有安装ncurses,就会出现以下报错 *** Unable to find the ncurses librari ...
- SVN 分支代码合并到主线
SVN 分支代码合并到主线 步骤一安装TortoiseSVN 客户端,在本地 checkout主线代码 步骤二:创建branches分支 步骤三.branches修改提交代码 步骤四:分支代码合并到主 ...