在网络编程中的TCP传输里,拿到Socket的源后,应该怎么进行读写操作呢,下面我列举了两种方法,希望大家帮忙补充····

1.利用byte数组作为一个缓冲区进行读写

客户端上传

 //获取socket流,将图片上传给服务端
FileInputStream fis=new FileInputStream("c:\\12.jpg"); //获取了输出流
OutputStream out=s.getOutputStream(); //用数组作为缓冲
byte[]buf=new byte[1024]; //len用来记录长度
int len=0; //循环读写
while((len=fis.read(buf))!=-1){
//当返回-1时表示读完毕,此时len为总长度
out.write(buf,0,len);
}
//服务端接收时

 1 InputStream in=s.getInputStream();
File dir=new File("c:\\pic");
if(!dir.exists()){
dir.mkdirs();
}
FileOutputStream fos=new FileOutputStream("server.jpg");
byte[] buf=new byte[1024];
int len=0;
while((len=in.read())!=-1){
fos.write(buf,0,len);
}

 服务端接收(不需要写入文件中时)

 byte [] buf=new byte[1024];
//此时只需要或取长度就可以了
int len=in.read(buf);
//直接用数组获取文本就可以了
String text=new String(buf,0,len);

2.使用缓冲区作为缓冲

       //客户端上传

        //使用流输出数据
       BufferedReader bufr=new BufferedReader(new FileReader("client.txt")); //通过使用PrintWriter对字节流和字符流进行处理,接管流
PrintWriter out =new PrintWriter(s.getOutputStream(),true); //开始读取,上传给服务端
String line=null;
while((line=bufr.readLine())!=null){
out.println(line);
}
       //服务端接收

  
      //将接收的数据放入流中
BufferedReader bufIn=
new BufferedReader(new InputStreamReader(s.getInputStream())); //指定要写入得文件
BufferedWriter bufw=new BufferedWriter(new FileWriter("server.txt")); //开始读取
//缓冲区的默认大小为8k,一到8k则会自动刷新,若没有结束标志,则得到的文件大小一定是8的倍数
String line=null;
while((line=bufIn.readLine())!=null){
if("over".equals(line))
break;
bufw.write(line);
bufw.newLine();
//自己写刷新
bufw.flush();
}

java网络编程TCP传输—流操作—拿到源后的写入动作的更多相关文章

  1. java网络编程TCP传输—流操作—服务端反馈与客户端接收

    在读取完流后,服务端会向客户端返回一些数据,告诉客户端,已经写完了. 在这里和”流操作—拿到源后的写入动作“差不多,客户端同样以byte与Buffered两种缓冲读取作为例子,同时,.也是希望大家给补 ...

  2. java网络编程(TCP详解)

    网络编程详解-TCP 一,TCP协议的特点              面向连接的协议(有发送端就一定要有接收端)    通过三次连接握手建立连接 通过四次握手断开连接 基于IO流传输数据 传输数据大小 ...

  3. Java网络编程(TCP客户端)

    TCP传输:两个端点建立连接后会有一个传输数据的通道,这个通道就称为流,而且是建立在网络基础上的流,之为socket流,该流中既可以读取也可以写入. TCP的两个端点:一个客户端:ServerSock ...

  4. java 网络编程-tcp/udp

    --转自:http://blog.csdn.net/nyzhl/article/details/1705039 直接把代码写在这里,解释看这里吧:http://blog.csdn.net/nyzhl/ ...

  5. JAVA网络编程-----TCP沟通

    java采纳TCP变速箱使用Socket和ServerSocket数据传输. 采纳tcp步模式数据传输: 1.设定client和服务器 ,分别对应Socket和ServerSocket 2.建立连接后 ...

  6. Java网络编程のTCP/IP

    TCP/IP参考模型和TCP/IP协议 与OSI参考模型相似,TCP/IP参考模型汲取了网络分层的思想,而且对网络的层次做了简化,并在网络各层都提供了完善的协议,这些协议构成了TCP/IP协议集,简称 ...

  7. Java分享笔记:Java网络编程--TCP程序设计

    [1] TCP编程的主要步骤 客户端(client): 1.创建Socket对象,构造方法的形参列表中需要InetAddress类对象和int型值,用来指明对方的IP地址和端口号. 2.通过Socke ...

  8. java网络编程—TCP(1)

    演示tcp的传输的客户端和服务端的互访. 需求:客户端给服务端发送数据,服务端收到后,给客户端反馈信息. 客户端: 1,建立socket服务.指定要连接主机和端口. 2,获取socket流中的输出流. ...

  9. JAVA网络编程TCP通信

    Socket简介: Socket称为"套接字",描述IP地址和端口.在Internet上的主机一般运行多个服务软件,同时提供几种服务,每种服务都打开一个Socket,并绑定在一个端 ...

随机推荐

  1. java要注意的问题2

    八.替Java省点内存 某些Java程序是CPU密集型的,但它们会需要大量的内存.这类程序通常运行得很缓慢,因为它们对内存的需求很大.为了能提升这类应用的性能,可得给它们多留点内存.因此,假设我们有一 ...

  2. LeetCode:括号的分数【856】

    LeetCode:括号的分数[856] 题目描述 给定一个平衡括号字符串 S,按下述规则计算该字符串的分数: () 得 1 分. AB 得 A + B 分,其中 A 和 B 是平衡括号字符串. (A) ...

  3. hibernate 一对多、多对多的配置

    一对多 <class name="Question" table="questions" dynamic-insert="true" ...

  4. linux---(6/27)tr命令和sed命令详解

    Tr命令: tr是简单的单个“字符”处理工具,而sed是功能非常强大的“字符串”处理工具. 用于查询,字符串2用于处理各种转换.tr刚执行时,字符串1中的字符被映射到字符串2中的字符,然后转换操作开始 ...

  5. adas--智能驾驶辅助系统

    先进驾驶辅助系统(Advanced Driver AssistantSystem),简称ADAS,是利用安装于车上的各式各样的传感器(可侦测光.热.压力等变数), 在第一时间收集车内外的环境数据, 进 ...

  6. React-native Android环境搭建

    基础安装 安装Homebrew Homebrew是Mac OSX的包管理器,我们需要通过Homebrew安装开发React Native的相关软件包. 如果不知道怎样安装Homebrew可以点这里:官 ...

  7. CSS3圆盘时钟

    在线演示 本地下载

  8. 实验三 敏捷开发与XP实践 实验报告 20162305李昱兴

    实验三 敏捷开发与XP实践 实验报告 20162305 一.什么是敏捷开发与XP 敏捷开发(Agile Development)是一种以人为核心.迭代.循序渐进的开发方法.敏捷开发以用户的需求进化为核 ...

  9. Autofac register and resolve

    Passing Parameters to Register When you register components you have the ability to provide a set of ...

  10. hibernate的多对多配置

    Teacher.java package com.xiaostudy.domain; import java.util.HashSet; import java.util.Set; /** * Tea ...