`

Java socket字节流传输的示例

    博客分类:
  • java
 
阅读更多
package com.yuan.socket;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * Created by YUAN on 2016-09-17.
 */
public class TalkServer4Byte {
    
    private ServerSocket server;
    private int port = 5020;

    public TalkServer4Byte() {
        try {
            server = new ServerSocket(port);
        } catch (IOException e) {
        }
    }

    public void talk() {
        System.out.println("监控端口:" + port);
        Socket socket = null;
        while (true) {
            try {
                // 阻塞等待,每接收到一个请求就创建一个新的连接实例
                socket = server.accept();
                System.out.println("连接客户端地址:" + socket.getRemoteSocketAddress());

                // 装饰流BufferedReader封装输入流(接收客户端的流)
                BufferedInputStream bis = new BufferedInputStream(
                        socket.getInputStream());

                DataInputStream dis = new DataInputStream(bis);
                byte[] bytes = new byte[1]; // 一次读取一个byte
                String ret = "";
                while (dis.read(bytes) != -1) {
                    ret += bytesToHexString(bytes) + " ";
                    if (dis.available() == 0) { //一个请求
                        doSomething(ret);
                    }
                }

            } catch (IOException e) {
                System.out.println(e.getMessage());
            } finally {
                try {
                    socket.close();
                } catch (IOException e) {
                    System.out.println(e.getMessage());
                }
            }
        }

    }
    
    public static void doSomething(String ret) {
        System.out.println(ret);
    }

    public static String bytesToHexString(byte[] src) {
        StringBuilder stringBuilder = new StringBuilder("");
        if (src == null || src.length <= 0) {
            return null;
        }
        for (int i = 0; i < src.length; i++) {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
        }
        return stringBuilder.toString();
    }

    public static String BytesHexString(byte[] b) {
        String ret = "";
        for (int i = 0; i < b.length; i++) {
            String hex = Integer.toHexString(b[i] & 0xFF);
            if (hex.length() == 1) {
                hex = '0' + hex;
            }
            ret += hex.toUpperCase();
        }
        return ret;
    }

    public static void main(String[] args) {
        TalkServer4Byte server = new TalkServer4Byte();
        server.talk();
    }
}

 

package com.yuan.socket;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;

/**
 * Created by YUAN on 2016-09-17.
 */
public class TalkClient4Byte {
    
    private Socket socket;
    private SocketAddress address;

    public TalkClient4Byte() {
        try {
            socket = new Socket();
            address = new InetSocketAddress("127.0.0.1", 5020);
            socket.connect(address, 1000);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public void talk() {

        try {

            //使用DataInputStream封装输入流
            InputStream os = new DataInputStream(System.in);
            
            byte [] b = new byte[1];
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
            while (-1 != os.read(b)) {
                dos.write(b); // 发送给客户端
            }
            
            dos.flush();
            dos.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                socket.close();
            } catch (IOException e) {

            }
        }
    }

    public static void main(String[] args) {
        TalkClient4Byte client = new TalkClient4Byte();
        client.talk();
    }

}

 

分享到:
评论

相关推荐

    Java socket字节流传输示例解析

    总结来说,这个Java Socket字节流传输示例展示了如何创建一个简单的服务器,监听客户端的连接,接收并处理客户端发送的字节数据。通过使用字节流,我们可以处理任何类型的数据,无论是文本、图像还是其他二进制数据...

    Java基于Socket文件传输示例

    Java基于Socket文件传输示例是一种常见的网络编程应用场景,主要用于实现两个网络节点间的文件共享和交换。Socket编程是Java网络通信的基础,它提供了低级别的、面向连接的、双向的数据传输通道。在这个示例中,我们...

    java socket 视频流转发socket

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

    ByteIO_java_字节流_

    Java的`java.io`包提供了大量预定义的字节流类,例如`FileInputStream`和`FileOutputStream`用于文件操作,`SocketInputStream`和`SocketOutputStream`则涉及网络通信。 在`ByteIO.java`文件中,我们可以预期看到...

    Java基于Socket文件传输示例:服务器端和客户端

    这个简单的示例展示了如何使用Java的Socket API进行文件传输,但实际应用中可能需要考虑更多的因素,比如错误处理、断线重连、多线程处理多个客户端、安全性(如SSL/TLS加密)、文件分块传输以优化性能等。...

    java socket传输各种格式文件

    文件传输基于Socket的核心在于将文件拆分成字节流,通过Socket的输入/输出流进行传输。首先,服务端需要读取文件并将其转换为字节流,然后通过Socket的OutputStream发送。客户端接收时,通过Socket的InputStream读取...

    Java实现字节流与图片的转化Java源码

    本教程将详细讲解如何使用Java实现字节流与图片之间的转换,这对于在网络上传输或者存储图片等二进制数据至关重要。 首先,我们需要了解Java中的字节流。Java提供了两种类型的字节流:输入流(InputStream)和输出...

    Java socket文件传输实例

    - 打开本地文件并读取其内容,将其转换为字节流,然后通过Socket的输出流向服务器发送。 - 发送完成后关闭Socket和相关的流。 在"java示例程序4-传文件"中,可能包含了实现以上逻辑的Java代码。这些代码会展示...

    Java Socket示例

    Java Socket是Java编程语言中用于网络通信的核心API,它提供了低级别的、面向连接的、可靠的、基于字节流的通信。在本示例中,"Java Socket示例"是一个在NetBeans环境中开发的简单聊天工具,它利用了Socket来实现...

    Java Socket 通信服务与客户端完整示例

    在Java编程中,Socket是实现网络通信的基础,它提供了低级别的、面向连接的、可靠的字节流通信。在这个"Java Socket 通信服务与客户端完整示例"中,我们可以深入理解Socket通信的原理以及如何在实际项目中应用。 1....

    java-socket传输文件-图片-源码

    根据提供的文件信息,本文将详细解析Java中利用Socket进行文件(包括图片)传输的相关知识点。 ### Java Socket基础知识 在深入探讨文件传输之前,我们先简要回顾一下Java Socket的基础概念。Socket是一种允许不同...

    基于java文件传输示例

    本文将深入探讨基于Java和Socket技术的文件传输原理,并通过一个实际示例,帮助读者理解如何利用Java进行高效的文件传输。 #### Java文件传输的核心技术:Socket **Socket**(套接字)是网络通信的基础组件,它...

    Java Socket传输文件

    - 在接收完所有数据后,将接收到的字节流写入本地文件,完成文件接收。 2. **客户端**: - 创建Socket,指定服务器的IP和端口,并尝试建立连接。 - 通过Socket的OutputStream获取输出流,准备发送数据。 - 将待...

    java socket编程示例

    - 数据在网络中是以字节流的形式传输的,因此通常使用`InputStream`和`OutputStream`的子类,如`DataInputStream`和`DataOutputStream`,它们提供了一些方便的方法来读写基本数据类型。 - 在示例中,`TCPServer....

    Java Socket实现文件传输示例代码

    这个示例展示了如何使用Java的I/O和Socket库进行基本的文件传输。然而,实际应用中,为了提高性能和可靠性,可能需要添加错误处理、断点续传、多线程优化、安全加密(如SSL/TLS)等特性。此外,对于大型文件,可能会...

    JAVA socket示例程序

    - 数据通常以字节流的形式在网络间传输,因此可以使用`DataInputStream`和`DataOutputStream`来处理基本类型的数据。 4. **异常处理** - 在进行Socket编程时,必须处理各种可能的网络异常,如`IOException`、`...

    Java大文件传输示例额

    4. 将这个对象序列化成字节流,以便在网络中传输。 在传输阶段,可以使用Socket编程或者HTTP/HTTPS协议进行数据交换。Java的`Socket`类提供了客户端和服务端通信的能力,而`HttpURLConnection`则支持HTTP协议的请求...

    java socket编程

    Java Socket编程是Java平台中用于实现网络通信的核心API,它基于TCP/IP协议栈,提供了低级别的、面向连接的、可靠的字节流通信。在本文中,我们将深入探讨Java Socket编程的关键概念、工作原理以及如何创建服务端和...

    java socket 长连接实例

    在Java中,Socket提供了面向连接的、可靠的、基于字节流的通信服务。"Java Socket 长连接实例"是关于如何实现一个持久连接的服务器和客户端程序的示例,这种连接能够保持开放,直到一方明确地关闭它。这在需要频繁...

    Java Socket学习---单线程阻塞

    数据传输通常是字节流,所以可能会用到`InputStreamReader`、`BufferedReader`、`PrintWriter`等类进行字符流的转换和控制。 最后,`EchoClient.java`代表客户端程序。客户端也需要创建`Socket`对象,通过`connect...

Global site tag (gtag.js) - Google Analytics