//服务端
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通信的更多相关文章

  1. Java 之 TCP 通信程序

    一.概述 TCP 通信能实现两台计算机之间的数据交互,通信的两端,要严格区分为客户端(Client)与服务端(Server). 两端通信时步骤: 1.服务端程序,需要事先启动,等待客户端的连接: 2. ...

  2. java实现TCP通信(带界面)

    服务端: package NetWork; import java.io.*;import java.net.*;import java.awt.event.*;import java.awt.*;i ...

  3. java 网络编程之TCP通信和简单的文件上传功能

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  4. TCP通信实现对接硬件发送与接收十六进制数据 & int与byte的转换原理 & java中正负数的表示

    今天收到的一份需求任务是对接硬件,TCP通信,并给出通信端口与数据包格式,如下: 1.首先编写了一个简单的十六进制转byte[]数组与byte[]转换16进制字符串的两个方法,如下: /** * 将十 ...

  5. 【Java】同步阻塞式(BIO)TCP通信

    TCP BIO 背景 网络编程的基本模型是Clien/Server模型,也就是两个进程之间进行相互通信,其中服务端提供位置信息(绑定的IP地址和监听端口),客户端通过连接操作向服务端监听的地址发起连接 ...

  6. Java网络编程之TCP通信

    一.概述 Socket类是Java执行客户端TCP操作的基础类,这个类本身使用代码通过主机操作系统的本地TCP栈进行通信.Socket类的方法会建立和销毁连接,设置各种Socket选项. Server ...

  7. 【Java TCP/IP Socket】深入剖析socket——TCP通信中由于底层队列填满而造成的死锁问题(含代码)

    基础准备 首先需要明白数据传输的底层实现机制,在http://blog.csdn.net/ns_code/article/details/15813809这篇博客中有详细的介绍,在上面的博客中,我们提 ...

  8. 【Java TCP/IP Socket】基于NIO的TCP通信(含代码)

    NIO主要原理及使用 NIO采取通道(Channel)和缓冲区(Buffer)来传输和保存数据,它是非阻塞式的I/O,即在等待连接.读写数据(这些都是在一线程以客户端的程序中会阻塞线程的操作)的时候, ...

  9. 实验09——java基于TCP实现客户端与服务端通信

    TCP通信         需要先创建连接 - 并且在创建连接的过程中 需要经过三次握手        底层通过 流 发送数据 数据没有大小限制        可靠的传输机制 - 丢包重发 包的顺序的 ...

随机推荐

  1. xray与burp联动被动扫描

    最近也是刚实习了几天,看见带我的那位老哥在用xray,而且贼溜,所以我想写几篇关于xray的使用的文章 0x00 xray建立监听 在实际测试过程中,除了被动扫描,也时常需要手工测试.这里使用 Bur ...

  2. Java 异常分析

    Java 异常分析 本文是对以下内容的分析: Java异常设计 Java 异常分类 Java异常可以告诉什么问题 Java异常处理最佳实践 Java Exception 是为了处理应用程序的异常行为而 ...

  3. rocketmq实现延迟队列精确到秒级实现(总结编)

    前言篇: 为了节约成本,决定通过自研来改造rocketmq,添加任意时间延迟的延时队列,开源版本的rocketmq只有支持18个等级的延迟时间, 其实对于大部分的功能是够用了的,但是以前的项目,全部都 ...

  4. vue组件实现图片的拖拽和缩放

    vue实现一个组件其实很简单但是要写出一个好的可复用的组件那就需要多学习和钻研一下,一个好的组件必须有其必不可少的有优点:一是能提高应用开发效率.测试性.复用性等:二是组件应该是高内聚.低耦合的:三是 ...

  5. macos下命令行通过ndk编译android下可以执行的ELF程序(并验证opencl的调用)

    源码如下,实现把一个JPG保存成灰度图格式的BMP 1 //jpg2bmp.cpp 2 #include <stdio.h> 3 #include <inttypes.h> 4 ...

  6. unity3d C# soket客户端接受失败

    using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using S ...

  7. 基于World Wind的数据可视化插件

    基于开源数据可视化类库(MSChart.VTK.D3)实现的组件样例,并基于World Wind实现调用上述组件的功能插件. GitHub下载地址:https://github.com/hujiuli ...

  8. 白话linux操作系统原理

    虽然计算机相关专业,操作系统和计算机组成原理是必修课.但是大学时和真正从事相关专业工作之后,对于知识的认知自然会发生变化.还很有可能,一辈子呆在学校的老师们只是照本宣科,自己的理解也不深.所以今天我站 ...

  9. 比 WSL2 更香的是 Docker for windows!

    今天给大家推荐一个软件 -- "Docker for windows": 如果你对WSL2,还不熟悉,可以关注公众号或小程序看看我之前推送过的两篇文章. Docker for wi ...

  10. golang中的并发安全和锁

    1. 并发安全 package main import ( "fmt" "sync" ) var ( sum int wg sync.WaitGroup ) f ...