java实现 TCP通信
- //服务端
import com.hl.bluetooth.util.CRC16;- import com.hl.bluetooth.util.FrameCheckFailedException;
- import com.hl.bluetooth.util.stream.StreamUtils;
- import com.hl.bluetooth.util.util;
- import lombok.SneakyThrows;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import java.io.*;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.nio.ByteBuffer;
- import java.util.Arrays;
- /**
- * @author hwx
- * @date 2021/11/4
- */
- public class TcpServer extends ServerSocket {
- private static final Logger logger = LoggerFactory.getLogger(TcpServer.class);
- public TcpServer(int serverPort) throws IOException {
- super(serverPort);
- try {
- while (true) {
- Socket socket = accept();
- new ServerThread(socket);
- }
- } catch (Exception e) {
- logger.error("tcp服务器已停止监听");
- } finally {
- close();
- }
- }
- class ServerThread extends Thread /*建立服务端线程*/ {
- private Socket socket;
- private DataInputStream inputStream;
- private InputStream in;
- private InputStream i;
- private byte[] bytes;
- private DataOutputStream out;
- public ServerThread(Socket s) throws Exception {
- logger.info("tcp服务器开始监听......");
- this.socket = s;
- in = socket.getInputStream();
- inputStream = new DataInputStream(in);
- /* in = new BufferedReader(new InputStreamReader(
- socket.getInputStream(), "GB2312")); *//*国标码*/
- out = new DataOutputStream(socket.getOutputStream());
- String str = s.getInetAddress().getHostAddress();
- StreamUtils.setOutputStream(s.getInetAddress().getHostAddress(), new DataOutputStream(socket.getOutputStream()));
- StreamUtils.setInputStream(s.getInetAddress().getHostAddress(), new DataInputStream(socket.getInputStream()));
- // 开始线程
- start();
- }
- @SneakyThrows
- @Override
- public void run() {
- try {
Scanner scanner = new Scanner(System.in);// 装饰标准输入流,用于从控制台输入- while (true) {
String send = scanner.nextLine();//读取控制台输入的内容
System.out.println("客户端:" + send);//输出键盘输出内容提示 ,也就是客户端向服务器端发送的消息
// 把从控制台得到的信息传送给服务器
out.writeUTF("客户端:" + send);//将客户端的信息传递给服务器
String accpet = in.readUTF();// 读取来自服务器的信息
System.out.println(accpet);//输出来自服务器的信息
- }
- } catch (Exception e) {
- logger.error(socket.getInetAddress().getHostAddress() + "连接断开-----" + e.getMessage(), e);
- } finally {
- DataOutputStream outputStream = StreamUtils.getOutputStream(socket.getInetAddress().getHostAddress());
- outputStream.close();
- inputStream.close();
- socket.close();
- }
- }
- //客户端
import java.io.*;- import java.net.Socket;
- import java.net.UnknownHostException;
- /**
- * @author hwx
- * @date 2021/11/4
- */
- public class TcpClient {
- /**
- * 定义socket连接
- */
- private Socket socket;
- private DataInputStream inputStream;
- /**
- * 打印到文本输出流
- */
- private PrintWriter writer;
- private OutputStream outputStream;
- public TcpClient(int serverPort) { /*定义客户端端口号*/
- try { /*抛异常*/
- socket = new Socket("192.168.153.202", serverPort);
- inputStream = new DataInputStream(
- /*标准输入输出流*/
- socket.getInputStream());
- writer = new PrintWriter(socket.getOutputStream());
- outputStream = socket.getOutputStream();
- while (true) {
- BufferedReader in = new BufferedReader(
- new InputStreamReader(System.in));
- String message = in.readLine();if ("finish".equals(message)) {
- System.out.println("服务器已停止监听");
- break;
- }
- }
- outputStream.close();
- writer.close();
- inputStream.close(); /*关闭流*/
- socket.close();
- } catch (UnknownHostException ex) {
- ex.printStackTrace();
- } catch (IOException ex) {
- ex.printStackTrace(); /*在命令行打印异常信息在程序中出错的位置及原因*/
- }
- }
- }
java实现 TCP通信的更多相关文章
- Java 之 TCP 通信程序
一.概述 TCP 通信能实现两台计算机之间的数据交互,通信的两端,要严格区分为客户端(Client)与服务端(Server). 两端通信时步骤: 1.服务端程序,需要事先启动,等待客户端的连接: 2. ...
- java实现TCP通信(带界面)
服务端: package NetWork; import java.io.*;import java.net.*;import java.awt.event.*;import java.awt.*;i ...
- java 网络编程之TCP通信和简单的文件上传功能
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- TCP通信实现对接硬件发送与接收十六进制数据 & int与byte的转换原理 & java中正负数的表示
今天收到的一份需求任务是对接硬件,TCP通信,并给出通信端口与数据包格式,如下: 1.首先编写了一个简单的十六进制转byte[]数组与byte[]转换16进制字符串的两个方法,如下: /** * 将十 ...
- 【Java】同步阻塞式(BIO)TCP通信
TCP BIO 背景 网络编程的基本模型是Clien/Server模型,也就是两个进程之间进行相互通信,其中服务端提供位置信息(绑定的IP地址和监听端口),客户端通过连接操作向服务端监听的地址发起连接 ...
- Java网络编程之TCP通信
一.概述 Socket类是Java执行客户端TCP操作的基础类,这个类本身使用代码通过主机操作系统的本地TCP栈进行通信.Socket类的方法会建立和销毁连接,设置各种Socket选项. Server ...
- 【Java TCP/IP Socket】深入剖析socket——TCP通信中由于底层队列填满而造成的死锁问题(含代码)
基础准备 首先需要明白数据传输的底层实现机制,在http://blog.csdn.net/ns_code/article/details/15813809这篇博客中有详细的介绍,在上面的博客中,我们提 ...
- 【Java TCP/IP Socket】基于NIO的TCP通信(含代码)
NIO主要原理及使用 NIO采取通道(Channel)和缓冲区(Buffer)来传输和保存数据,它是非阻塞式的I/O,即在等待连接.读写数据(这些都是在一线程以客户端的程序中会阻塞线程的操作)的时候, ...
- 实验09——java基于TCP实现客户端与服务端通信
TCP通信 需要先创建连接 - 并且在创建连接的过程中 需要经过三次握手 底层通过 流 发送数据 数据没有大小限制 可靠的传输机制 - 丢包重发 包的顺序的 ...
随机推荐
- redis的使用场景和优缺点
使用场景和优缺点: 2 Redis用来做什么? 通常局限点来说,Redis也以消息队列的形式存在,作为内嵌的List存在,满足实时的高并发需求.而通常在一个电商类型的数据处理过程之中,有关商品,热销, ...
- Kafka connector (kafka核心API)
前言 Kafka Connect是一个用于将数据流输入和输出Kafka的框架.Confluent平台附带了几个内置connector,可以使用这些connector进行关系数据库或HDFS等常用系统到 ...
- 通过HTML+CSS+Javascript实现向下滚动滚动条出现导航栏并出现回到顶部按钮点击按钮回到顶部(一)
回到顶部实例一 效果:默认隐藏导航栏,当滚动条滚到超过300px后导航栏和按钮出现,点击回到顶部按钮回到顶部,并隐藏导航栏和按钮(导航栏和按钮都是固定定位) <!doctype html> ...
- 常用字符的ASCII码
字母 ASCII码 十进制数 0 00110000 48 9 00111001 57 A 01000001 ...
- 流言粉碎机:JAVA使用 try catch 会严重影响性能
目录 一.JVM 异常处理逻辑 二.关于JVM的编译优化 1. 分层编译 2. 即时编译器 1. 解释模式 2. 编译模式 3. 提前编译器:jaotc 三.关于测试的约束 执行用时统计 编译器优化的 ...
- Tomcat-IDEA整合Tomcat服务器
Tomcat(IDEA整合Tomcat服务器) 可以加多个版本tomcat
- python3 .format()函数
Python 3.5.2实验 >>> print('{0},{1}'.format('kzc',18) ) kzc,18 >>> print('{},{}'.for ...
- 手把手教你用Strace诊断问题
手把手教你用Strace诊断问题 发表于2015-10-16 早些年,如果你知道有个 strace 命令,就很牛了,而现在大家基本都知道 strace 了,如果你遇到性能问题求助别人,十有八九会建议你 ...
- tmux 入门教程
tmux 本教程是基于ACWing的<Linux基础课>所做,希望大家支持ACWing 功能 分屏 当需要同时运行两个终端,并且进行比对着输入时,来回切换比较麻烦,就可以利用分屏 可以在一 ...
- CDNDrive 第一个版本发布 & 布客新知第二次备份完成
CDNDrive 第一个版本发布,新适配五个图床 https://github.com/apachecn/CDNDrive 另外,布客新知第二次备份完成 TutorialsPoint:http://i ...