使用的类
    ServerSocket 服务器端
    
    构造方法:ServerSocket(端口号); 接收端使用
    方法:accept(); 返回一个 Socket对象
    getInetAddress();返回发送端的地址 InetAddress对象

Socket 客户端 发送端
    构造方法:
        Socket(IP地址,端口号);
        Socket(主机名,端口号);
    方法:
    getPort();返回端口号
    getLocalAddress();获取Socket对象绑定的本地IP地址
    getInputStream();获取一个输入对象
    getOutputStream();获取一个输出对象

  1. 1 服务器端创建:
  2. import java.io.FileInputStream;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.OutputStream;
  6. import java.net.Socket;
  7. import java.net.UnknownHostException;
  8. public class TCPSERver {
  9. public static void main(String[] args) throws IOException {
  10. ServerSocket ss=new ServerSocket();
  11. Socket sk=ss.accept();
  12. InputStream is=sk.getInputStream();
  13. File f=new File("D:\\test\\d");
  14. //判断服务器相对的文件夹是否存在
  15. if(!f.exists())
  16. {
  17. f.mkdir();
  18. }
  19. //文件名改为域名+毫秒值+6位随机数
  20. String filename="zys"+System.currentTimeMillis()+new Random().nextInt();
  21. String path=f.getAbsolutePath()+File.separator+filename+".txt";
  22. FileOutputStream fo=new FileOutputStream(path);
  23. byte[] b=new byte[];
  24. int len=;
  25. while((len=is.read(b))!=-)
  26. {
  27. fo.write(b,,len);
  28. }
  29.  
  30. //回复客户端
  31. OutputStream out=sk.getOutputStream();
  32. out.write("上传成功".getBytes());
  33. //释放
  34. ss.close();
  35. fo.close();
  36.  
  37. }
  38. }
  1. 1 创建客户端:
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.OutputStream;
  7. import java.net.ServerSocket;
  8. import java.net.Socket;
  9. import java.util.Random;
  10.  
  11. public class TCPSERver {
  12. public static void main(String[] args) throws IOException {
  13. ServerSocket ss=new ServerSocket();
  14. Socket sk=ss.accept();
  15. InputStream is=sk.getInputStream();
  16. File f=new File("D:\\test\\d");
  17. //判断服务器相对的文件夹是否存在
  18. if(!f.exists())
  19. {
  20. f.mkdir();
  21. }
  22. //文件名改为域名+毫秒值+6位随机数
  23. String filename="zys"+System.currentTimeMillis()+new Random().nextInt();
  24. String path=f.getAbsolutePath()+File.separator+filename+".txt";
  25. FileOutputStream fo=new FileOutputStream(path);
  26. byte[] b=new byte[];
  27. int len=;
  28. while((len=is.read(b))!=-)
  29. {
  30. fo.write(b,,len);
  31. }
  32.  
  33. //回复客户端
  34. OutputStream out=sk.getOutputStream();
  35. out.write("上传成功".getBytes());
  36. //释放
  37. ss.close();
  38. fo.close();
  39.  
  40. }
  41. }
  1. 其他案例:
  2. 服务器使用多线程实现多人传送文件
  3. 将服务器实现代码实现Runnable接口
  4. 重写run方法,封装到run方法中
  5.  
  6. 此代码中的ServerSocket ss=new ServerSocket();接收文件语句封装到实现类中
  7. import java.io.IOException;
  8. import java.net.ServerSocket;
  9. import java.net.Socket;
  10.  
  11. public class Demo1 {
  12. public static void main(String[] args) throws IOException {
  13. ServerSocket ss=new ServerSocket();
  14. //死循环一直接受客户端
  15. while(true)
  16. {
  17. Socket sk=ss.accept();
  18. MyRunnable mr=new MyRunnable(sk);
  19. new Thread(mr).start();
  20.  
  21. }
  22.  
  23. }
  24. }
  25.  
  26. import java.io.File;
  27. import java.io.FileOutputStream;
  28. import java.io.IOException;
  29. import java.io.InputStream;
  30. import java.io.OutputStream;
  31. import java.net.Socket;
  32. import java.util.Random;
  33.  
  34. public class MyRunnable implements Runnable{
  35. private Socket sk;
  36.  
  37. public MyRunnable(Socket sk)
  38. {
  39. this.sk=sk;
  40. }
  41.  
  42. public void run() {
  43. FileOutputStream fo=null;
  44. InputStream is=null;
  45. try{
  46. is=sk.getInputStream();
  47. File f=new File("D:\\test\\d");
  48. if(!f.exists())
  49. {
  50. f.mkdir();
  51. }
  52. //文件名改为域名+毫秒值+6位随机数
  53. String filename="zys"+System.currentTimeMillis()+new Random().nextInt();
  54. String path=f.getAbsolutePath()+File.separator+filename+".txt";
  55. fo=new FileOutputStream(path);
  56. byte[] b=new byte[];
  57. int len=;
  58. while((len=is.read(b))!=-)
  59. {
  60. fo.write(b,,len);
  61. }
  62.  
  63. //回复客户端
  64. OutputStream out=sk.getOutputStream();
  65. out.write("上传成功".getBytes());
  66.  
  67. }catch(IOException ex){
  68. ex.printStackTrace();
  69. }finally{
  70. try {
  71. fo.close();
  72. } catch (IOException e) {
  73.  
  74. e.printStackTrace();
  75. }
  76. }
  77.  
  78. }
  79.  
  80. }

TCP实现连接传输案例的更多相关文章

  1. socket套接字TCP协议传输-案例测试

    术语: 套接字接口:socket,是一个IP地址和一个端口号的组合,套接字可以唯一标识整个Internet中的一个网络进程. TCP连接:一对套接字接口(一个用于接收,一个用于发送)可定义面向连接的协 ...

  2. SQL Server 连接问题案例解析(1)

    SQL Server 连接问题案例解析(1) 转载自:http://blogs.msdn.com/b/apgcdsd/archive/2015/04/27/sql.aspx?CommentPosted ...

  3. TCP与UDP传输协议

    目录结构: contents structure [-] 1 TCP协议和UDP协议的比较 1.1 TCP协议 TCP的全称是Transmission Control Protocol (传输控制协议 ...

  4. 不仅仅是百万级TCP长连接框架 t-io

    t-io: 不仅仅是百万级TCP长连接框架 t-io是基于jdk aio实现的易学易用.稳定.性能强悍.将多线程运用到极致.内置功能丰富的即时通讯框架(广义上的即时通讯,并非指im),字母 t 寓意t ...

  5. 性能分析之TCP全连接队列占满问题分析及优化过程(转载)

    前言 在对一个挡板系统进行测试时,遇到一个由于TCP全连接队列被占满而影响系统性能的问题,这里记录下如何进行分析及解决的. 理解下TCP建立连接过程与队列 从图中明显可以看出建立 TCP 连接的时候, ...

  6. TCP/IP连接状态

    1.建立连接协议(三次握手)(1)客户端发送一个带SYN标志的TCP报文到服务器.这是三次握手过程中的报文1.(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN ...

  7. 网络层、传输层、应用层、端口通信协议编程接口 - http,socket,tcp/ip 网络传输与通讯知识总结

    引: http://coach.iteye.com/blog/2024511 什么是TCP和UDP,以及二者区别是什么? TCP的全称为传输控制协议.这种协议可以提供面向连接的.可靠的.点到点的通信. ...

  8. Http 和TCP的关系,TCP长连接和短连接有什么区别?

    HTTP 协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用.由于HTTP在 ...

  9. 用wireshark抓包分析TCP三次握手、四次挥手以及TCP实现可靠传输的机制

    关于TCP三次握手和四次挥手大家都在<计算机网络>课程里学过,还记得当时高超老师耐心地讲解.大学里我遇到的最好的老师大概就是这位了,虽然他只给我讲过<java程序设计>和< ...

随机推荐

  1. 在独立的 Root 和 Home 硬盘驱动器上安装 Ubuntu

    安装 Linux 系统时,可以有两种不同的方式.第一种方式是在一个超快的固态硬盘上进行安装,这样可以保证迅速开机和高速访问数据.第二种方式是在一个较慢但很强大的普通硬盘驱动器上安装,这样的硬盘转速快并 ...

  2. 「每天一道面试题」Java类的生命周期包括哪几个阶段?

    一个Java类被加载到虚拟机中,它的生命周期才算开始,直到被从内存中卸载,它的生命周期才算结束.从开始到结束,它的整个生命周期包括加载.验证.准备.解析.初始化.使用和卸载7个阶段,其中验证.准备和解 ...

  3. 写代码?程序猿?你不能不懂的八大排序算法的Python实现

    信息获取后通常需要进行处理,处理后的信息其目的是便于人们的应用.信息处理方法有多种,通常由数据的排序,查找,插入,删除等操作.本章介绍几种简单的数据排序算法和高效的排序算法. 本章主要涉及到的知识点有 ...

  4. python(数据类型)

    一.基本数据类型 (1)numbers 数字 整型 int a = 1 print (type(a)) 长整型 long python3.x 中无此类型 >>> 2 ** 100 1 ...

  5. RF(For 循环)

    一.介绍:RobotFrameWork 支持 FOR 循环语句,语法和 Python 的语法基本相同,但 RobotFrameWork 中,"FOR" 关键字前面需要增加一个 &q ...

  6. 也谈解决Combobox绑定数据后取值出现System.Data.DataRowView的问题

    刚才遇到一个怪现象:同一个窗口,同一张表,通过第一个Combobox值的改变,动态绑定第二个Combobox,结果出现一个怪现象,第一个Combobox有的值改变第二个Combobox一切正常,有几个 ...

  7. windows脱密码总结

    方式1:通过SAM数据库获得本地用户HASH sam文件:是用来存储本地用户账号密码的文件的数据库system文件:里面有对sam文件进行加密和加密的密钥 利用方式: 导出sam和system: re ...

  8. 树莓派4B踩坑指南 - (15)搭建在线python IDE

    今天想在树莓派上自己搭一个在线的python IDE,于是找到了一篇教程--Fred913大神的从头开始制作OJ-在线IDE的搭建 自己尝试动手做了一下, 还是发现不少细节需要注意, 记录在此 如果不 ...

  9. D. Sequence Sorting dp

    D. Sequence Sorting 题目大意:给你一个序列,有一种操作就是对所有相同的数可以挪到最前面,也可以挪到最后面,问最少操作次数. 首先,对于很多个相同的数,可以缩成两个位置,一个是就是这 ...

  10. mybatis添加信息自动生成主键

    一.使用Oracle数据库 举例:添加员工的时候自动生成主键 1.在dao接口中声明方法 2.在mapper中实现该方法 需要先在数据表中创建序列 3.测试 注意:在调用过save方法之后,emp对象 ...