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(); } } }
相关推荐
学习这个项目,你可以了解如何在Java中结合TCP协议实现网络通信,理解Socket编程的基本原理,以及如何设计简单的UI来增强用户体验。此外,还可以掌握如何处理并发连接,因为ServerSocket是可以同时接受多个客户端...
Java编程语言在工业自动化和设备通信领域中广泛应用于实现Modbus通信协议,这是一种标准化的通信协议,用于设备间的数据交换。...通过理解源码,可以深入理解Modbus协议的实现细节和Java在串口及网络通信中的应用。
Socket是Java中实现网络通信的基本接口,它允许两台计算机通过TCP/IP进行通信。这篇文章将介绍如何使用Java创建一个简单的TCP Socket通信实例,包括服务端和客户端的实现。 ### 1. TCP Socket通信模型 TCP Socket...
综上所述,Java通过`Socket`类和I/O流支持TCP协议的客户端实现,提供可靠的数据传输服务。在编写TCP协议客户机时,需要关注连接建立、数据传输、异常处理以及资源关闭等关键环节。同时,配合相关图形资料,如`Java....
在IT领域,网络通信是核心部分之一,而IP/TCP协议是互联网协议栈中的关键层次。本文将深入探讨如何利用Java编程语言实现对IP和TCP协议数据包的拦截与分析,以便获取IP地址的详细信息。 首先,我们需要理解IP...
3. **Java中的Socket编程**:Java的Socket类是实现网络通信的基础,它提供了双向的数据流通道。在Java中实现ModbusTCP通信,首先需要创建一个Socket对象,指定服务器的IP地址和端口号,然后通过Socket的输入输出流...
在本项目中,"java版聊天软件"采用了TCP协议进行通信,意味着客户端与服务器之间建立稳定、可靠的连接,可以保证消息的无丢失和顺序传递。 【源码分析】 源码是学习和理解软件实现的关键。在这个Java聊天软件中,...
Modbus 协议是一项应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信,包括 ASCII、RTU、TCP 三种报文类型。 Modbus TCP 数据帧由 MBAP 和 PDU 两部分组成。MBAP 是报文头,长度为...
1、本项目则是使用Java实现TCP的Socket网络通信,包含C/S软件架构的程序设计,偏向实践,更加有趣! 2、实现简单有趣的“创意”聊天机器人。 3、建立通信规则: Server和Client之间需要约定相同的规则,保证正常通信...
### ModbusTCP协议Java实现详解 #### 一、概述 Modbus协议是一种广泛应用于工业自动化领域的通信协议,它主要用于在设备之间进行数据交换。随着工业网络的发展,ModbusTCP/IP应运而生,该协议结合了Modbus的功能与...
3. **Java实现**: 在这个项目中,开发者使用Java编程语言实现了ModbusTCP协议的客户端部分,允许程序通过TCP连接与支持Modbus协议的设备进行交互。Java的选择是因为它具有跨平台性、丰富的库支持以及强大的网络编程...
总结来说,这个“java的tcp协议小聊天室源码”项目旨在通过实践来教授Java TCP网络编程的基础,包括如何创建服务器和客户端、如何进行数据交换,以及如何利用多线程处理并发连接。这个简单的应用对于理解TCP通信机制...
Java中的TCP和UDP Socket通信是网络编程...使用这样的框架,开发者可以专注于业务逻辑,而无需关心底层网络通信的细节,提高了开发效率。对于初学者,通过研究这个框架,也能深入理解TCP和UDP Socket通信的原理和实践。
Java Socket TCP/IP通信是Java编程中用于网络通信的重要部分,主要应用于物联网(IoT)场景。TCP/IP协议栈是互联网的基础,它定义了数据在网络中如何传输的规则。Socket是TCP/IP协议在Java中的实现,提供了客户端和...
在TCP协议下进行文件传输时,需要考虑以下几个关键点: 1. **连接建立**:客户端通过`Socket`类的`connect()`方法与服务器建立连接,这个过程涉及到TCP的三次握手。 2. **数据传输**:数据传输过程中,由于TCP是...
在IT行业中,网络通信是计算机科学的一个重要领域,TCP(Transmission Control Protocol)协议作为传输层的核心协议之一,被广泛应用于...通过实践,你将能更深入地理解TCP协议的工作原理以及C#在网络编程中的应用。
自已写的通信功能,两个机器互发信息,东西虽小,技术却一点没少,新手学习很方便
在TCP协议的基础上,聊天系统利用了Java的套接字(Socket)API来构建网络通信的基础。`Socket`对象代表了网络上的一个连接,包含了一个IP地址和一个端口号,用于在客户端和服务器之间建立通信管道。通过`Socket`的...
在实际应用中,我们可以使用Java的`Socket`和`ServerSocket`类编写客户端和服务端程序,通过输入输出流进行数据交换,实现TCP协议的验证。例如,`Socket.getInputStream()`和`Socket.getOutputStream()`分别用于获取...
JAVA TCP-IP Socket 网络通信编程研究是关于使用 Java 语言实现基于 TCP/IP 协议的网络通信编程的研究。该研究主要关注于使用 Java Socket 实现 TCP/IP 网络程序框架及网络通信的程序实现。 关键词: 网络通信;Tcp/...