Java-No.10 Socket处理inputstream输入流

在创建socket使用inputstream输入流,read()方法,如果调用的是available(),返回字节流的长度时,可能会返回0,或者其他数值,进行网络操作时往往出错,因为你调用available()方法时,对发发送的数据可能还没有到达,你得到的count是0。

网络传输中实现方式如下:

int readBytes = 0;  
byte[] buffer = new byte[1024];//1024可改成任何需要的值  
int len = buffer.length;
while (readBytes < len) {
    int read = inputStream.read(buffer, readBytes, len - readBytes);  
    //判断是不是读到了数据流的末尾 ,防止出现死循环。  
    if (read == -1 || read < (len - readBytes)) {
        readBytes += read; 
    	break;
    }

    if(read == (len - readBytes)) {
        byte[] tmpBuffer = new byte[len * 2];
        System.arraycopy(buffer, 0, tmpBuffer, 0, buffer.length);
        buffer = tmpBuffer;
    	len = buffer.length;
    }
			  
    readBytes += read;
}

byte[] endodedData = new byte[readBytes];
System.arraycopy(buffer, 0, endodedData, 0, readBytes);
System.out.println(endodedData.length);
时间: 2024-10-16 22:55:13

Java-No.10 Socket处理inputstream输入流的相关文章

java网络编程socket解析

转载:http://www.blogjava.net/landon/archive/2013/07/02/401137.html Java网络编程精解笔记2:Socket详解 Socket用法详解 在C/S通信模式中,client需要主动创建于server连接的Socket(套接字).服务器端收到了客户端的连接请求,也会创建与客户连接的Socket.Socket可看做是通信两端的收发器.server与client都通过Socket来收发数据. 1.构造Socket 1.Socket() 2.So

java网络编程Socket通信详解

Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术.下面就让我们一起揭开Socket的神秘面纱. Socket编程 一.网络基础知识(参考计算机网络)            关于计算机网络部分可以参考相关博客:           <TCP/IP协议栈及OSI参考模型详解> http://wangdy.blog.51cto.com/3845563/

java代码实现socket接口通讯(堵塞I/O)

   传统的java实现socket通讯比较简单实现,不过它属于堵塞式的I/O流存取,只能由一个线程完成当前任务才能起下个一个线程,无法解决高并发:   1.简单的socketservice 对每一个Socket连接建立一个Handler处理线程,处理线程对inputstream流中的数据进行相应的处理后,将处理结果通过PrintWriter发送给客户端,在最后需要关闭输入流.输出流和socket套接字句柄资源. 1 public class TimeServer { 2 3 public st

java.net.SocketException: socket closed

在使用socket编程的时候,发现当使用完getInputStream方法后,再获取OutputStream就会报 java.net.SocketException: socket closed错误 看到JAVA api中写到 java.net.Socket.getInputStream方法: getInputStream public InputStream getInputStream()throws IOException 返回此套接字的输入流. 如果此套接字具有关联的通道,则所得的输入流

java网络编程socket\server\TCP笔记(转)

java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅 1 TCP的开销 a  连接协商三次握手,c->syn->s,s->syn ack->c, c->ack->s b  关闭协商四次握手,c->fin->s, s->ack-c,s->fin->c,c->ack->s c  保持数据有序,响应确认等计算开销 d

java中的socket编程

Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的Socket编程,并且如何写一个客户端/服务器程序. Unix的输入输出(IO)系统遵循Open-Read-Write-Close这样的操作范本.当一个用户进程进行IO操作之前,它需要调用Open来指定并获取待操作文件或设备读取或写入的权限.一旦IO操作对象被打开,那么这个用户进程可以对这个对象进行一

Java TCP使用Socket进行网络图片传送(6)

作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39338831 本文演示,使用Socket进行网络图片传送,实现客户端的client.bmp文件上传到服务端. 1)客户端,上传client.bmp图片给服务端,并接受服务端返回的"上传成功"消息. 2)服务端,接受客户端的图片并保存为server.bmp,同时给客户端发送"上传成功"消息. 客户端,代码如下: package upload.p

【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题(含代码)

书上示例 在第一章<基本套接字>中,作者给出了一个TCP Socket通信的例子——反馈服务器,即服务器端直接把从客户端接收到的数据原原本本地反馈回去. 书上客户端代码如下: import java.net.Socket; import java.net.SocketException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class TCPEch

使用java实现的socket代理(支持socket4和socket5)

import java.io.*; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.nio.ByteBuffer; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import ja