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程序设计>和< ...
随机推荐
- Lucene的FuzzyQuery中用到的Levenshtein Distance(LD)算法
2019独角兽企业重金招聘Python工程师标准>>> Lucene的FuzzyQuery中用到的Levenshtein Distance(LD)算法 博客分类: java 搜索引擎 ...
- CodeForces - 1047A
A. Little C Loves 3 I time limit per test1 second memory limit per test256 megabytes inputstandard i ...
- The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 B so easy
题目链接:https://nanti.jisuanke.com/t/41384 这题暴力能过,我用的是并查集的思想,这个题的数据是为暴力设置的,所以暴力挺快的,但是当他转移的点多了之后,我觉得还是我这 ...
- Windows+Ubuntu双系统 ,Ubuntu安装
这篇只是简单记录自己在Win10下另安装Ubuntu系统. 不是教程,因为不会. 推荐一个教程:https://blog.csdn.net/weixin_37029453/article/detail ...
- springboot后端校验
这一篇讲解了如何定义特殊的校验 https://www.cnblogs.com/cjsblog/p/8946768.html https://blog.csdn.net/xgblog/article/ ...
- libevent(五)使用例子
客户端: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/t ...
- Tunnel Warfare 线段树 区间合并|最大最小值
B - Tunnel WarfareHDU - 1540 这个有两种方法,一个是区间和并,这个我个人感觉异常恶心 第二种方法就是找最大最小值 kuangbin——线段树专题 H - Tunnel Wa ...
- 第九章:Python高级编程-Python socket编程
第九章:Python高级编程-Python socket编程 Python3高级核心技术97讲 笔记 9.1 弄懂HTTP.Socket.TCP这几个概念 Socket为我们封装好了协议 9.2 cl ...
- learn from collection framework design
最难忍受的痛苦,也许是想干一件事情而又不去干.--罗曼·罗兰 前言 本篇文章算是拾人牙慧吧,偶尔谷歌到一个能很好把collection framework design讲好的文档,一是为了总结提升,也 ...
- 5.7.17版本mysqlbinlog实时拉取的二进制日志不完整的原因分析
问题描述: 同事使用mysqlbinlog工具的--read-from-remote-server --raw选项,从远程实例实时拉取二进制日志时,发现得到的二进制日志文件大小与远程实例上的源文件大小 ...