`

流与socket

    博客分类:
  • java
阅读更多

所有东西 为自己理解,有的地方会不准,如果有高手可以指出,非常感谢。

 

这里对使用socket 

 

//流读取工具类 

public class StreamUtil {

 

  //正常读取本地文件的时可以用,但用于网络传输读取数据时会有问题

//一旦 网络中另一方的数据没有返回到 这边 则会出现阻塞状态

public static byte[] readStream(InputStream is ) throws IOException{

 

ByteArrayOutputStream outStream = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];

  // is.read( buffer,0,lenth  )

while(  is.read( buffer  ) !=-1  ){

outStream.write(buffer );

}

is.close();

outStream.close();

return outStream.toByteArray();

}

 

  //调用 availble 可用于网络上读取数据 

public static byte[] readStreamAvailble(InputStream is ) throws IOException{

int len =0;

while(len==0){

//如果服务端 没有数据返回则 不断的取数据 ,直到取到数据位置 ,一旦出现阻塞则数据则会不准确 

len = is.available();

}

byte[] bs = new byte[len];

is.read( bs );

return bs;

}

  //测试

public static void main(String[] args) throws IOException {

File file = new File("e:/1113.txt");

InputStream is = new FileInputStream(file);;

byte[] str = readStream( is);

System.out.println( new String(str)  );

}

}

 

-------socket 服务端 使用 网络读取数据 

 

public class Server {

 

public static void main(String[] args) throws IOException {

ServerSocket server = new ServerSocket(8001);

while(true ){

Socket socket = server.accept();

//对于每个客户端的请求  每个请求创建一个线程来回应

new Thread(new ServerImpl( socket )).start();

}

}

}



public class ServerImpl implements Runnable {

Socket socket = null;
public ServerImpl(Socket socket){
this.socket = socket ;
}
@Override
public void run() {
InputStream is = null;
OutputStream os = null;
//异常处理要 放到循环的外面,放到循环内部会影响效率
try {

socket.setKeepAlive(true);
socket.setSoTimeout(3 * 1000);
 
while(true){
is = socket.getInputStream();
// 如果调用 readStream方法 则程序会出现阻塞状态 
byte[]  bs = StreamUtil.readStreamAvailble(is);
//当调用这个方法读取客户端的数据时候 ,如果客户端阻塞时间超过服务端 setSoTimeout中设置的时间则read 会超时异常
//byte[]  bs = StreamUtil.readStream(is);

System.out.println( "收到的信息为:"+ new String(bs ));
os = socket.getOutputStream();
os.write( "回应的信息".getBytes()  );
os.flush();

System.out.println( "是否绑定:"+socket.isBound()); // 是否邦定
System.out.println( "是否关闭:"+ socket.isClosed());
System.out.println( "是否保持连接:"+ socket.isConnected());
System.out.println( "输入流是否close:"+ socket.isInputShutdown());
System.out.println( "输出流是否close :"+ socket.isOutputShutdown());

//  服务端使用完的 输入  输出流 和socket 不能关闭 , 因为客户端还与服务端保持联系 ,一点关闭则会出现异常
// is.close();
// os.close();
// socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
// if(is!=null ){
// is.close();
// }
// if(os!=null){
// os.close();
// }
// if(socket!=null){
// socket.close();
// }
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

 

==========客户端 

 

public class Client {

 

  public static void main(String[] args) { client2(); } /** * 测试 过期时间 设置 * @Title: client2 * @Description: * @param * @return void * @throws */ public static void client2(){ Socket socket = null; try { socket = new Socket("127.0.0.1", 8001); socket.setKeepAlive(true); while(true && null != socket){

//服务器阻塞 Thread.sleep(10 * 1000); } } catch ( Exception e) { e.printStackTrace(); } } /** * 测试输入流 * @Title: client1 * @Description: * @param * @return void * @throws */ public static void client1(){ Socket socket = null; OutputStream os = null; InputStream is = null ; try { socket = new Socket("127.0.0.1", 8001); socket.setKeepAlive(true); socket.setSoTimeout( 30*1000 ); os = socket.getOutputStream(); os.write( "服务器你好:".getBytes()); is = socket.getInputStream(); byte[] bs = StreamUtil.readStreamAvailble(is); System.out.println( "服务器的消息:"+ new String(bs )); is.close(); os.close(); socket.close(); } catch ( Exception e) { e.printStackTrace(); }finally{ try { if(is!=null ){ is.close(); } if(os!=null){ os.close(); } if(socket!=null){ socket.close(); } } catch (IOException e) { e.printStackTrace(); } } }

}

 

参考:

http://cuisuqiang.iteye.com/blog/1434416

 

 

分享到:
评论

相关推荐

    java IO流+socket源码 实现简单文本传输

    在这个示例中,我们将深入探讨如何利用Java IO流与Socket实现简单的文本传输。对于初学者来说,理解这两个概念及其交互是非常关键的。 首先,让我们来了解Java IO流。IO流在Java中用于读取和写入数据,它可以是文件...

    java socket 视频流转发socket

    在"Java Socket 视频流转发Socket"这个主题中,我们将深入探讨如何使用Java Socket来处理视频流的传输。 首先,让我们了解什么是ServerSocket。在Java中,`java.net.ServerSocket`类是服务器端使用的,它监听特定...

    socket编程 TCP文件的传输实现 客户端和服务端

    另一种是使用输入输出流,直接将文件流与Socket流对接,实现文件的透明传输。无论哪种方式,都需要处理好异常,确保文件完整传输且不会因网络波动导致数据丢失。 客户端(client)的代码通常包括以下步骤: 1. 创建...

    Socket网络编程.rar

    - 文件流与Socket流的结合:可以将`FileStream`与`NetworkStream`关联,实现文件数据的发送和接收。 - 分块传输:大文件通常需要分块发送,以避免一次性加载到内存中。 7. **震动功能**: - 对于“震动弹出”...

    java socket 视频流转发socket.zip

    在本项目“java socket 视频流转发socket.zip”中,我们很显然关注的是如何使用Java Socket进行视频流的转发操作。下面将详细介绍Java Socket在视频流转发中的应用及其相关知识点。 1. **Socket基础** - **Socket...

    Socket文件传输

    4. **文件流与Socket流**:在进行文件传输时,需要将文件流(FileStream)与Socket流(NetworkStream)相结合。首先读取文件内容到内存,然后通过Socket发送到网络,接收端再将接收到的数据写入到文件。 5. **异步...

    javaCV将socket获取的视频流推到流媒体(RTMP)服务器jar

    在这个场景中,JavaCV被用来从Socket接收视频流,然后将其推送到流媒体服务器,特别是使用RTMP协议的服务器。下面将详细介绍这个过程涉及的关键知识点。 1. **JavaCV**: JavaCV(Java Computer Vision)是一个开源...

    socket详解 socket详解 socket详解 socket详解

    Socket 有两种类型:基于流的 Socket(Stream Socket)和基于数据报的 Socket(Datagram Socket)。 * 基于流的 Socket:使用 TCP 协议,提供可靠的、有序的、无损失的数据传输。例如,HTTP、FTP、TELNET 等协议都...

    视频推流调试.rar java PHP c++ 推流调试工具,socket开发

    在IT行业中,视频推流是在线直播服务的关键技术,它涉及到服务器端与客户端的数据传输,主要依赖于Socket编程。这个“视频推流调试.rar”压缩包包含针对Java、PHP和C++三种不同编程语言的推流调试工具,适用于开发者...

    android socket surface视频流播放器

    本文将详细解析"android socket surface mediacodec h264"这个主题,涵盖如何通过Socket接收视频流数据,并利用Surface和MediaCodec进行解码与播放。 首先,Socket是网络通信的基础,它提供了进程间的数据传输通道...

    Qt OpenCV 播放及Socket发送视频流

    在本文中,我们将深入探讨如何使用Qt和OpenCV来播放视频流,并通过Socket进行传输。首先,让我们了解这两个核心技术。 **OpenCV(开源计算机视觉库)** 是一个强大的跨平台库,专门用于图像处理和计算机视觉任务。...

    《NIO与Socket编程技术指南》_高洪岩

    Socket通信基于TCP/IP协议,确保数据的可靠传输,通过输入流和输出流进行数据交换。在实际应用中,Socket常用于实现分布式服务、聊天应用、文件传输等场景。 本书可能涵盖了以下主题: 1. NIO基础:介绍NIO的基本...

    HPSocket.Net-develop_hpsocket.net_HPSocket_.net_socket_tcp_

    【描述】"C# 版socket 收发TCP协议有模版样例"表明这个资源包含了一个具体的实例,展示了如何在C#中使用Socket类进行TCP协议的数据发送与接收。在.NET框架中,Socket类是网络通信的基础,它提供了对TCP/IP和UDP/IP...

    包的测试 SOCKET传二进制流

    本文将深入探讨“包的测试”以及如何通过SOCKET在C语言环境中传递二进制流。 首先,TCP是一种面向连接的、可靠的传输层协议,它确保了数据在互联网上的正确、完整传输。TCP通过建立连接来保证数据的有序和无损传输...

    C# Socket编程(4)初识Socket和数据流

    网络流是专门用于网络通信的流,如`NetworkStream`类,它是与Socket关联的流,用于读写网络上的字节流。在TCP通信中,我们通常使用`NetworkStream`与Socket配合,实现数据的发送和接收。 3.2 内存流 内存流是对内存...

    android 安卓手机与电脑socket通信

    本教程将深入探讨如何使用Socket通信来连接安卓设备与个人计算机。Socket,也被称作套接字,是网络编程中的基本概念,它提供了进程间通过网络进行双向通信的能力。 首先,我们需要理解Socket的工作原理。Socket基于...

    C#与Android Socket通信

    4. 获取输入流和输出流对象,通常使用Socket的getInputStream和getOutputStream方法。 5. 使用输入流读取服务器发送的数据,使用输出流写入要发送到服务器的数据。 6. 完成数据交换后,记得关闭Socket连接。 三、...

    c# 异步socket(能发送文本,文件和数据流)

    本主题将深入探讨如何利用C#的异步Socket实现发送文本、文件以及数据流的功能。 1. **异步Socket基础** 异步Socket编程模式基于.NET Framework中的`System.Net.Sockets.Socket`类,通过调用异步方法如`...

    android+pc socket通信

    "Android+PC Socket通信"指的是通过TCP Socket协议实现Android设备(手机客户端)与个人计算机之间的数据传输。Socket通信允许应用程序之间建立端到端的连接,进行双向数据交换,非常适合用于实时通讯、文件传输等...

    基于Socket的Telnet服务设计与实现

    "基于Socket的Telnet服务设计与实现" 一、Telnet协议概述 Telnet协议是TCP协议族中的一员,是Internet远程登录服务的标准协议。远程登录是指用户使用Telnet命令,使自己的计算机成为远程主机的一个仿真终端的过程...

Global site tag (gtag.js) - Google Analytics