java TCP服务器与客户端通信示例

目录

背景:

TCP服务代码解析:

TCP服务器的代码:

服务器程序的工作流程:

[TCP客户端代码解析 :](#TCP客户端代码解析 :)

TCP客户端代码:

客户端工作流程:

总结:


背景:

如何使用Java编程语言实现一个简单的TCP服务器和客户端。那么TCP是什么?TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。下面将编写两个简单的Java程序来展示TCP通信的基本原理。

TCP服务代码解析:

TCP服务器的代码:

java 复制代码
import java.net.*;    
import java.io.*;    
  
public class TCPServer {    
  public static void main(String[] args) throws Exception {    
    // 创建一个ServerSocket对象,监听6666端口  
    ServerSocket ss = new ServerSocket(6666);   
      
    // 无限循环,等待客户端连接  
    while (true) {    
      // 当有客户端连接时,accept()方法返回一个新的Socket对象  
      Socket s = ss.accept();    
        
      // 从Socket中获取输入流,并使用DataInputStream进行封装  
      DataInputStream dis = new DataInputStream(s.getInputStream());    
        
      // 从输入流中读取UTF字符串并打印  
      String message = dis.readUTF();   
      System.out.println("Received from client: " + message);   
        
      // 关闭流和Socket连接  
      dis.close();    
      s.close();    
    }    
  }    
}

服务器程序的工作流程:

1.创建一个ServerSoket对象,监听指定的端口(这里6666)

2.进入无限循环,等待客户端的连接

3.当有客户端时,accept()方法会返回一个新的Socket独享

4.从这个Socket对象中获取输入流,并使用DataInputStream进行封装

5.读取输入流中的UTF字符串,并打印到控制台

6.关闭输入流和Socket连接

TCP客户端代码解析 :

TCP客户端代码:

java 复制代码
import java.net.*;    
import java.io.*;    
  
public class TCPClient {    
  public static void main(String[] args) throws Exception {    
    // 创建一个Socket对象,连接到服务器的指定IP和端口  
    Socket s = new Socket("127.0.0.1", 6666);    
      
    // 从Socket中获取输出流,并使用DataOutputStream进行封装  
    OutputStream os = s.getOutputStream();    
    DataOutputStream dos = new DataOutputStream(os);   
      
    // 向输出流中写入UTF字符串  
    dos.writeUTF("hello server!");    
      
    // 刷新输出流,确保数据被发送  
    dos.flush();    
      
    // 关闭输出流和Socket连接  
    dos.close();    
    s.close();    
  }    
}

客户端工作流程:

1.创建一个Socket对象,连接到服务器的指定IP和端口(这里是127.0.0.1和666)

2.从这个Socket对象中获取输出流,并使用DataOuptStream进行封装

3.向输出流中写入UTF字符串

3.刷新输出流,确保数据被发送到服务器

5.关闭输出流和Socket连接

总结:

类别 TCP服务器 TCP客户端
功能 监听指定端口,等待客户端连接,处理客户端发送的数据 连接到服务器,发送数据到服务器
主要类 ServerSocket Socket
创建方式 ServerSocket ss = new ServerSocket(port); Socket s = new Socket(host, port);
监听端口 通过ServerSocket构造函数指定 无需监听,连接到服务器的指定端口
数据接收 使用ServerSocketaccept()方法等待客户端连接,然后获取Socket对象的InputStream进行读取 使用Socket对象的getOutputStream()获取输出流,然后写入数据
数据发送 无需直接发送数据,而是从客户端接收数据 使用Socket对象的getOutputStream()获取输出流,并使用DataOutputStream或其他包装类写入数据
数据读取 使用Socket对象的getInputStream()获取输入流,并使用DataInputStream或其他包装类读取数据 无需直接读取数据,而是将数据发送到服务器
关闭连接 关闭Socket对象的输入流和Socket本身 关闭Socket对象的输出流和Socket本身
注意事项 1.需要处理并发连接(例如使用多线程) 2.需要处理可能的异常和错误 3.可能需要设置超时和缓冲区大小 1.需要确保服务器正在运行并监听指定端口 2.需要处理可能的异常和错误 3.可能需要设置超时和缓冲区大小

通过上面的示例,Java中TCP服务器和客户端的基本实现。服务监听一个端口,等待客户端的连接,当客户端连接后,双方可以通过Socket 对象进行数据的读写,这里使用DataInputStream和DataOutputeam来封装输入流和输出流,以便更好的读取和写入UTF字符串,

相关推荐
能工智人小辰4 分钟前
二刷 苍穹外卖day10(含bug修改)
java·开发语言
DKPT5 分钟前
Java设计模式之结构型模式(外观模式)介绍与说明
java·开发语言·笔记·学习·设计模式
缘来是庄7 分钟前
设计模式之外观模式
java·设计模式·外观模式
00后程序员张33 分钟前
调试 WebView 接口时间戳签名问题:一次精细化排查和修复过程
websocket·网络协议·tcp/ip·http·网络安全·https·udp
好名字更能让你们记住我38 分钟前
Linux多线程(十二)之【生产者消费者模型】
linux·运维·服务器·jvm·windows·centos
门思科技39 分钟前
设计可靠 LoRaWAN 设备时需要考虑的关键能力
运维·服务器·网络·嵌入式硬件·物联网
知其然亦知其所以然1 小时前
JVM社招面试题:队列和栈是什么?有什么区别?我在面试现场讲了个故事…
java·后端·面试
小锋学长生活大爆炸1 小时前
【知识】RPC和gRPC
服务器·网络协议·rpc
harmful_sheep1 小时前
Spring 为何需要三级缓存解决循环依赖,而不是二级缓存
java·spring·缓存
星辰大海的精灵1 小时前
如何确保全球数据管道中的跨时区数据完整性和一致性
java·后端·架构