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通信 需要先创建连接 - 并且在创建连接的过程中 需要经过三次握手 底层通过 流 发送数据 数据没有大小限制 可靠的传输机制 - 丢包重发 包的顺序的 ...
随机推荐
- 运行flutter-填坑之旅
运行flutter; 1.有一个问题,解决了好长时间 如果你安装了IntelliJ IDEA 2017.2.7 x64,运行flutter的时候报错,是因为IntelliJ IDEA 2017.2.7 ...
- JAVA之G1垃圾回收器
概述 G1 GC,全称Garbage-First Garbage Collector,通过-XX:+UseG1GC参数来启用,作为体验版随着JDK 6u14版本面世,在JDK 7u4版本发行时被正式推 ...
- 《手把手教你》系列技巧篇(五十七)-java+ selenium自动化测试-下载文件-下篇(详细教程)
1.简介 前边几篇文章讲解完如何上传文件,既然有上传,那么就可能会有下载文件.因此宏哥就接着讲解和分享一下:自动化测试下载文件.可能有的小伙伴或者童鞋们会觉得这不是很简单吗,还用你介绍和讲解啊,不说就 ...
- java集合分类
Java中的集合包括三大类,它们是Set.List和Map, Set(集) List(列表) Map(映射) 它们都处于java.util包中,Set.List和Map都是接口,它们有各自的实现类.( ...
- 谱分解(SD)
前提:矩阵A必须可相似对角化! 充分条件: $A$ 是实对称矩阵 $A$ 有 $n$ 个互异特征值 $A^{\wedge} 2=A $ $\mathrm{A}^{\wedge} 2=\mathrm{E ...
- 【C】C语言大作业——学生学籍管理系统
文章目录 学生管理系统 界面 主界面 登陆界面 注册界面 管理界面 学生界面 退出界面 链接 注意 学生管理系统 学C语言时写的一个大作业,弄了一个带图形界面的,使用的是VS配合EasyX图形库进行实 ...
- 设计模式-Java版-全-附代码-超生动实例
阅读推荐:设计模式-简单篇 项目地址:https://gitee.com/zwtgit/gof23 学习网站推荐: https://refactoringguru.cn/design-patterns ...
- Configmap-K8s容器的配置文件
传递配置给容器化应用程序有几种方式: 嵌入应用本身: 通过命令行传递参数: 通过环境变量传递参数: 在k8s中无论你有没有使用configmap,以下方法均可以配置应用程序: 向容器传递命令行参数:c ...
- Solon Web 开发,五、数据访问、事务与缓存应用
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- tomcat容器启动失败疑难问题解决方案
严重: 子容器启动失败java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: 初始化组件[or ...