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通信 需要先创建连接 - 并且在创建连接的过程中 需要经过三次握手 底层通过 流 发送数据 数据没有大小限制 可靠的传输机制 - 丢包重发 包的顺序的 ...
随机推荐
- [解决] No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
前端时间项目组让我改一个比较老的项目,说是用Android Studio2.3版本可以直接运行,于是我下载了一个2.3.2的,结果出现了一堆问题,总结下: 首先导入项目后build完直接报出:No t ...
- markdown mermaid状态图
状态图 状态图是一种用于计算机科学和相关领域描述系统行为的图.状态图要求描述的系统由有限数量的状态组成. 语法: stateDiagram-v2 [*] --> Still Still --&g ...
- pycharm常用设置项和快捷键
python开发工具pycharm非常人性化,使用方便,功能强大,可以做到与项目配置库结合使用.初次使用,一些设置项和快捷键不那么容易被发现和设置,那么给大家下面总结pycharm常用的设置项和快捷键 ...
- GIL全局解释器锁、死锁现象、python多线程的用处、进程池与线程池理论
昨日内容回顾 僵尸进程与孤儿进程 # 僵尸进程: 所有的进程在运行结束之后并不会立刻销毁(父进程需要获取该进程的资源) # 孤儿进程: 子进程正常运行 但是产生该子进程的父进程意外死亡 # 守护进程: ...
- Java高效开发-远程debug
1.前言 "这怎么回事?在本地还好好,放到服务器就不行了.这该怎么排查,日志也看不出来啥呀",日常开发中经常会出现这种问题,这时候就可以尝试idea远程debug的模式试试 2.使 ...
- Java中运算符及其优先级、自动类型提升、类型转化
自动类型提升的规则 两个操作数中有一个为double型的数据,计算结果提升为double. 两个操作数中无double型,有一个float,计算结果自动提升为float. ...
- 【刷题-LeetCode】191 Number of 1 Bits
Number of 1 Bits Write a function that takes an unsigned integer and return the number of '1' bits i ...
- 【练习】rust中的复制语义和移动语义
1.基本类型都是复制语义的 fn main(){ let a = 123; { #[allow(unused_variables)] let b = a; //如果是移动语义,那么后续的a将不再有效 ...
- manjora20不小心卸载,重新安装terminal,软件商店/软件中心linux类似
问题 重新安装老版本gnome-shell 如果突然死机可能卸载完了terminal和软件商店,但是没有安装新的. 此时没有terminal也没有软件商店 无法安装软件 解决方案 terminal c ...
- Docker安装配置mysql
Docker安装mysql踩坑日记 拉取镜像 sudo docker pull mysql:5.7 运行镜像 docker run -p 3306:3306 --name mysql -v /myda ...