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程序设计>和< ...
随机推荐
- 在独立的 Root 和 Home 硬盘驱动器上安装 Ubuntu
安装 Linux 系统时,可以有两种不同的方式.第一种方式是在一个超快的固态硬盘上进行安装,这样可以保证迅速开机和高速访问数据.第二种方式是在一个较慢但很强大的普通硬盘驱动器上安装,这样的硬盘转速快并 ...
- 「每天一道面试题」Java类的生命周期包括哪几个阶段?
一个Java类被加载到虚拟机中,它的生命周期才算开始,直到被从内存中卸载,它的生命周期才算结束.从开始到结束,它的整个生命周期包括加载.验证.准备.解析.初始化.使用和卸载7个阶段,其中验证.准备和解 ...
- 写代码?程序猿?你不能不懂的八大排序算法的Python实现
信息获取后通常需要进行处理,处理后的信息其目的是便于人们的应用.信息处理方法有多种,通常由数据的排序,查找,插入,删除等操作.本章介绍几种简单的数据排序算法和高效的排序算法. 本章主要涉及到的知识点有 ...
- python(数据类型)
一.基本数据类型 (1)numbers 数字 整型 int a = 1 print (type(a)) 长整型 long python3.x 中无此类型 >>> 2 ** 100 1 ...
- RF(For 循环)
一.介绍:RobotFrameWork 支持 FOR 循环语句,语法和 Python 的语法基本相同,但 RobotFrameWork 中,"FOR" 关键字前面需要增加一个 &q ...
- 也谈解决Combobox绑定数据后取值出现System.Data.DataRowView的问题
刚才遇到一个怪现象:同一个窗口,同一张表,通过第一个Combobox值的改变,动态绑定第二个Combobox,结果出现一个怪现象,第一个Combobox有的值改变第二个Combobox一切正常,有几个 ...
- windows脱密码总结
方式1:通过SAM数据库获得本地用户HASH sam文件:是用来存储本地用户账号密码的文件的数据库system文件:里面有对sam文件进行加密和加密的密钥 利用方式: 导出sam和system: re ...
- 树莓派4B踩坑指南 - (15)搭建在线python IDE
今天想在树莓派上自己搭一个在线的python IDE,于是找到了一篇教程--Fred913大神的从头开始制作OJ-在线IDE的搭建 自己尝试动手做了一下, 还是发现不少细节需要注意, 记录在此 如果不 ...
- D. Sequence Sorting dp
D. Sequence Sorting 题目大意:给你一个序列,有一种操作就是对所有相同的数可以挪到最前面,也可以挪到最后面,问最少操作次数. 首先,对于很多个相同的数,可以缩成两个位置,一个是就是这 ...
- mybatis添加信息自动生成主键
一.使用Oracle数据库 举例:添加员工的时候自动生成主键 1.在dao接口中声明方法 2.在mapper中实现该方法 需要先在数据表中创建序列 3.测试 注意:在调用过save方法之后,emp对象 ...