`
lance2002
  • 浏览: 7407 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JAVA 通过TCP协议进行网络通信

 
阅读更多
 


 
 
1、简单的例子,server端只负责接收数据,client端只负责发送数据。
 
package com.test.tcpsimple;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TCPSimpleServerTest {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            System.out.println("服务端启动成功,建立监听客户端消息。。。");
            ServerSocket server = null;
            try {
                // 创建一个ServerSocket在端口8888监听客户请求
                server = new ServerSocket(8888);
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                Socket socket = null;
                while (true) {
                    try {
                        // 由Socket对象得到输入流,并构造相应的BufferedReader对象
                        // 使用accept()阻塞等待客户请求,有客户
                        // 请求到来则产生一个Socket对象,并继续执行
                        socket = server.accept();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    System.out.println( sdf.format(new Date()) + " 接收到客户端消息:" + br.readLine());
                   
                    socket.close(); // 关闭Socket
                    br.close(); // 关闭Socket输入流
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                server.close(); // 关闭ServerSocket
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 
 
 
package com.test.tcpsimple;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TCPSimpleClientTest {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            System.out.println("客户端启动成功!");
            System.out.print("请输入需要发送给服务端的消息:");
            // 由系统标准输入设备构造BufferedReader对象
            BufferedReader brIn = new BufferedReader(new InputStreamReader(System.in));
            // 从系统标准输入读入一字符串
            String readline = brIn.readLine();
            // 若从标准输入读入的字符串为 "bye"则停止循环
            while (!readline.equals("bye")) {
               
                // 向本机的8888端口发出客户请求
                Socket socket = new Socket("127.0.0.1", 8888);
                PrintWriter pw = new PrintWriter(socket.getOutputStream());
                // 将从系统标准输入读入的字符串输出到Server
                pw.println(readline);
                // 刷新输出流,使Server马上收到该字符串
                pw.flush();
                // 在系统标准输出上打印读入的字符串
                System.out.println(sdf.format(new Date()) + " 向服务端发送消息:" + readline);
                System.out.println();
                System.out.print("请输入需要发送给服务端的消息:");
                pw.close();
                // 关闭Socket输出流
                socket.close();
                // 从系统标准输入读入一字符串
                readline = brIn.readLine();
            } // 继续循环
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 
2、扩展的例子,server端监听数据,监听到后,可以给clinet端进行回复,client端发送数据,但是也可以接收都server端的回复
 
package com.test.tcp;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TCPServerTest {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            System.out.println("服务端启动成功,建立监听客户端消息。。。");
            ServerSocket server = null;
            try {
                // 创建一个ServerSocket在端口8888监听客户请求
                server = new ServerSocket(8888);
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                Socket socket = null;
                while (true) {
                    try {
                        // 由Socket对象得到输入流,并构造相应的BufferedReader对象
                        // 使用accept()阻塞等待客户请求,有客户
                        // 请求到来则产生一个Socket对象,并继续执行
                        socket = server.accept();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    System.out.println( sdf.format(new Date()) + " 接收到客户端消息:" + br.readLine());
                    System.out.print("请输入返回给客户端的响应信息:");
                    String line;
                   
                    // 由Socket对象得到输出流,并构造PrintWriter对象
                    PrintWriter pw = new PrintWriter(socket.getOutputStream());
                   
                    // 由系统标准输入设备构造BufferedReader对象
                    BufferedReader brIn = new BufferedReader(new InputStreamReader(System.in));
                   
                    // 在标准输出上打印从客户端读入的字符串
                    // 从标准输入读入一字符串
                    line = brIn.readLine();
                   
                    // 如果该字符串为 "bye",则停止循环
                    if(line.equals("bye"));
                   
                    // 向客户端输出该字符串
                    pw.println(line);
                   
                    // 刷新输出流,使Client马上收到该字符串
                    pw.flush();
                   
                    // 在系统标准输出上打印读入的字符串
                    System.out.println( sdf.format(new Date()) + " 向客户端发送响应:" + line);
                    System.out.println("");
                   
                    socket.close(); // 关闭Socket
                    pw.close(); // 关闭Socket输出流
                    br.close(); // 关闭Socket输入流
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                server.close(); // 关闭ServerSocket
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 
package com.test.tcp;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TCPClientTest {
    public static void main(String[] args) {
       
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       
        try {
            // 向本机的8888端口发出客户请求
            System.out.println("客户端启动成功!");
            System.out.print("请输入需要发送给服务端的消息:");
            // 由系统标准输入设备构造BufferedReader对象
            BufferedReader brIn = new BufferedReader(new InputStreamReader(System.in));
            // 从系统标准输入读入一字符串
            String readline = brIn.readLine();
            // 若从标准输入读入的字符串为 "bye"则停止循环
            while (!readline.equals("bye")) {
                Socket socket = new Socket("127.0.0.1", 8888);
                PrintWriter pw = new PrintWriter(socket.getOutputStream());
                // 将从系统标准输入读入的字符串输出到Server
                pw.println(readline);
                // 刷新输出流,使Server马上收到该字符串
                pw.flush();
                // 在系统标准输出上打印读入的字符串
                System.out.println(sdf.format(new Date()) + " 向服务端发送消息:" + readline);
                BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                System.out.println(sdf.format(new Date()) + " 接收到服务端反馈消息:" + is.readLine());
                System.out.println();
                System.out.print("请输入需要发送给服务端的消息:");
                is.close();
                pw.close();
                // 关闭Socket输出流
                socket.close();
                // 从系统标准输入读入一字符串
                readline = brIn.readLine();
            } // 继续循环
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

  • 大小: 26.7 KB
分享到:
评论

相关推荐

    java网络通信TCP

    学习这个项目,你可以了解如何在Java中结合TCP协议实现网络通信,理解Socket编程的基本原理,以及如何设计简单的UI来增强用户体验。此外,还可以掌握如何处理并发连接,因为ServerSocket是可以同时接受多个客户端...

    java 通过modbus rtu协议,tcp 协议 通讯源码

    Java编程语言在工业自动化和设备通信领域中广泛应用于实现Modbus通信协议,这是一种标准化的通信协议,用于设备间的数据交换。...通过理解源码,可以深入理解Modbus协议的实现细节和Java在串口及网络通信中的应用。

    JAVA实现基于Tcp协议的简单Socket通信实例

    Socket是Java中实现网络通信的基本接口,它允许两台计算机通过TCP/IP进行通信。这篇文章将介绍如何使用Java创建一个简单的TCP Socket通信实例,包括服务端和客户端的实现。 ### 1. TCP Socket通信模型 TCP Socket...

    java TCP协议客户机

    综上所述,Java通过`Socket`类和I/O流支持TCP协议的客户端实现,提供可靠的数据传输服务。在编写TCP协议客户机时,需要关注连接建立、数据传输、异常处理以及资源关闭等关键环节。同时,配合相关图形资料,如`Java....

    用Java实现对IP/TCP协议数据包的拦截和分析

    在IT领域,网络通信是核心部分之一,而IP/TCP协议是互联网协议栈中的关键层次。本文将深入探讨如何利用Java编程语言实现对IP和TCP协议数据包的拦截与分析,以便获取IP地址的详细信息。 首先,我们需要理解IP...

    java ModbusTCP通讯

    3. **Java中的Socket编程**:Java的Socket类是实现网络通信的基础,它提供了双向的数据流通道。在Java中实现ModbusTCP通信,首先需要创建一个Socket对象,指定服务器的IP地址和端口号,然后通过Socket的输入输出流...

    java版聊天软件 TCP协议 附带源码

    在本项目中,"java版聊天软件"采用了TCP协议进行通信,意味着客户端与服务器之间建立稳定、可靠的连接,可以保证消息的无丢失和顺序传递。 【源码分析】 源码是学习和理解软件实现的关键。在这个Java聊天软件中,...

    基于java的modbus TCP通信

    Modbus 协议是一项应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信,包括 ASCII、RTU、TCP 三种报文类型。 Modbus TCP 数据帧由 MBAP 和 PDU 两部分组成。MBAP 是报文头,长度为...

    基于TCP协议网络socket编程-简单聊天机器人(java实现C/S通信)

    1、本项目则是使用Java实现TCP的Socket网络通信,包含C/S软件架构的程序设计,偏向实践,更加有趣! 2、实现简单有趣的“创意”聊天机器人。 3、建立通信规则: Server和Client之间需要约定相同的规则,保证正常通信...

    modbusTCP协议java实现(带注释)

    ### ModbusTCP协议Java实现详解 #### 一、概述 Modbus协议是一种广泛应用于工业自动化领域的通信协议,它主要用于在设备之间进行数据交换。随着工业网络的发展,ModbusTCP/IP应运而生,该协议结合了Modbus的功能与...

    JAVA写的利用ModbusTCP协议控制现场设备

    3. **Java实现**: 在这个项目中,开发者使用Java编程语言实现了ModbusTCP协议的客户端部分,允许程序通过TCP连接与支持Modbus协议的设备进行交互。Java的选择是因为它具有跨平台性、丰富的库支持以及强大的网络编程...

    java的tcp协议小聊天室源码

    总结来说,这个“java的tcp协议小聊天室源码”项目旨在通过实践来教授Java TCP网络编程的基础,包括如何创建服务器和客户端、如何进行数据交换,以及如何利用多线程处理并发连接。这个简单的应用对于理解TCP通信机制...

    JAVA TCP和UDP Socket通信框架

    Java中的TCP和UDP Socket通信是网络编程...使用这样的框架,开发者可以专注于业务逻辑,而无需关心底层网络通信的细节,提高了开发效率。对于初学者,通过研究这个框架,也能深入理解TCP和UDP Socket通信的原理和实践。

    java Socket Tcp/Ip通信

    Java Socket TCP/IP通信是Java编程中用于网络通信的重要部分,主要应用于物联网(IoT)场景。TCP/IP协议栈是互联网的基础,它定义了数据在网络中如何传输的规则。Socket是TCP/IP协议在Java中的实现,提供了客户端和...

    Java网络编程之TCP协议下—上传文件到服务器程序

    在TCP协议下进行文件传输时,需要考虑以下几个关键点: 1. **连接建立**:客户端通过`Socket`类的`connect()`方法与服务器建立连接,这个过程涉及到TCP的三次握手。 2. **数据传输**:数据传输过程中,由于TCP是...

    基于TCP协议实现双方通信

    在IT行业中,网络通信是计算机科学的一个重要领域,TCP(Transmission Control Protocol)协议作为传输层的核心协议之一,被广泛应用于...通过实践,你将能更深入地理解TCP协议的工作原理以及C#在网络编程中的应用。

    UDP与TCP协议通信

    自已写的通信功能,两个机器互发信息,东西虽小,技术却一点没少,新手学习很方便

    java写的一个简单基于tcp协议的多用户聊天系统

    在TCP协议的基础上,聊天系统利用了Java的套接字(Socket)API来构建网络通信的基础。`Socket`对象代表了网络上的一个连接,包含了一个IP地址和一个端口号,用于在客户端和服务器之间建立通信管道。通过`Socket`的...

    java Tcp协议验证

    在实际应用中,我们可以使用Java的`Socket`和`ServerSocket`类编写客户端和服务端程序,通过输入输出流进行数据交换,实现TCP协议的验证。例如,`Socket.getInputStream()`和`Socket.getOutputStream()`分别用于获取...

    JAVA TCP-IP Socket网络通信编程研究.pdf

    JAVA TCP-IP Socket 网络通信编程研究是关于使用 Java 语言实现基于 TCP/IP 协议的网络通信编程的研究。该研究主要关注于使用 Java Socket 实现 TCP/IP 网络程序框架及网络通信的程序实现。 关键词: 网络通信;Tcp/...

Global site tag (gtag.js) - Google Analytics