TCP通信
        需要先创建连接 - 并且在创建连接的过程中 需要经过三次握手
        底层通过 流 发送数据 数据没有大小限制
        可靠的传输机制 - 丢包重发 包的顺序的保障
        传输速度相对比较慢
        对于速度要求不太高 但是对可靠性要求比较高的场景下 - 文件上传 下载

因为TCP在通信的过程中 是需要创建连接的 连接的发起者称为客户端 监听端口等待被连接的一端称为服务端

1、客户端:Client.java

package ChatRoom.v3;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner; /**
* @author 赵瑞鑫 E-mail:1922250303@qq.com
* @version 1.0
* @创建时间:2020年8月3日 下午4:38:50
* @类说明: 服务端
*/
public class Client {
private static Socket socket;
private static String cli = "客户端:";
private static OutputStream out;
private static InputStream in;
private static PrintWriter pw;
private static BufferedReader br; public Client() {
try {
socket = new Socket("127.0.0.1", 8888);
System.out.println(cli + "套接字创建成功");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public static void start() {
// 1、套接字对象
try { while (true) {
// 2、获取输出流,写信息
out = socket.getOutputStream(); // 3、获取输入流,读信息
in = socket.getInputStream();
br = new BufferedReader(new InputStreamReader(in));
while (true) {
System.out.println("input:");
Scanner sc = new Scanner(System.in);
String msg = sc.next();
pw = new PrintWriter(out);
pw.println(msg);
pw.flush();
msg = br.readLine();
System.out.println(msg + "\n"); }
} } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 4、关闭流
try {
socket.close();
out.close();
pw.close();
in.close();
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } public static void main(String[] args) {
// TODO Auto-generated method stub
Client client = new Client();
client.start();
} }

 2、服务端:Server.java

package ChatRoom.v3;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket; /**
* @author 赵瑞鑫 E-mail:1922250303@qq.com
* @version 1.0
* @创建时间:2020年8月3日 下午4:38:36
* @类说明: 客户端 端口号:8888
*/
public class Server {
private static ServerSocket serversocket;
private static Socket socket;
private static String ser = "服务端:";
private static OutputStream out;
private static InputStream in;
private static PrintWriter pw;
private static BufferedReader br; public Server() {
try {
serversocket = new ServerSocket(8888);
System.out.println(ser + "套接字创建成功");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } public static void start() {
// 1、套接字对象
try { while (true) {
// 2、调用accept方法,接收请求
socket = serversocket.accept();
System.out.println(ser + "已接收请求,等待处理");
// 3、获取输入流对象,读客户端数据
in = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
while (true) {
String msg = br.readLine();
System.out.println(ser + "处理成功,请等待");
// 4、处理后的数据通过输出流写出去
out = socket.getOutputStream();
pw = new PrintWriter(out);
pw.println(ser + msg);
pw.flush();
} }
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 5、关闭流和套接字对象
try {
serversocket.close();
br.close();
pw.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } public static void main(String[] args) {
// TODO Auto-generated method stub
Server server = new Server();
server.start();
} }

实现客户端与服务端的通信是后续实现多人聊天室的基础,理清socket编程和输入输出流的使用非常重要。

实验09——java基于TCP实现客户端与服务端通信的更多相关文章

  1. 基于开源SuperSocket实现客户端和服务端通信项目实战

    一.课程介绍 本期带给大家分享的是基于SuperSocket的项目实战,阿笨在实际工作中遇到的真实业务场景,请跟随阿笨的视角去如何实现打通B/S与C/S网络通讯,如果您对本期的<基于开源Supe ...

  2. 二、网络编程-socket之TCP协议开发客户端和服务端通信

    知识点:之前讲的udp协议传输数据是不安全的,不可靠不稳定的,tcp协议传输数据安全可靠,因为它们的通讯机制是不一样的.udp是用户数据报传输,也就是直接丢一个数据包给另外一个程序,就好比寄信给别人, ...

  3. 网络编程 UDP协议 TCP局域网客户端与服务端上传下载电影示例

    UDP协议 (了解) 称之为数据包协议,又称不可靠协议. 特点: 1) 不需要建立链接. 2) 不需要知道对方是否收到. 3) 数据不安全 4) 传输速度快 5)能支持并发 6) 不会粘包 7) 无需 ...

  4. Python进阶----SOCKET套接字基础, 客户端与服务端通信, 执行远端命令.

    Python进阶----SOCKET套接字基础, 客户端与服务端通信, 执行远端命令. 一丶socket套接字 什么是socket套接字: ​ ​  ​ 专业理解: socket是应用层与TCP/IP ...

  5. Netty入门之客户端与服务端通信(二)

    Netty入门之客户端与服务端通信(二) 一.简介 在上一篇博文中笔者写了关于Netty入门级的Hello World程序.书接上回,本博文是关于客户端与服务端的通信,感觉也没什么好说的了,直接上代码 ...

  6. Android BLE与终端通信(三)——客户端与服务端通信过程以及实现数据通信

    Android BLE与终端通信(三)--客户端与服务端通信过程以及实现数据通信 前面的终究只是小知识点,上不了台面,也只能算是起到一个科普的作用,而同步到实际的开发上去,今天就来延续前两篇实现蓝牙主 ...

  7. netty-3.客户端与服务端通信

    (原) 第三篇,客户端与服务端通信 以下例子逻辑: 如果客户端连上服务端,服务端控制台就显示,XXX个客户端地址连接上线. 第一个客户端连接成功后,客户端控制台不显示信息,再有其它客户端再连接上线,则 ...

  8. 编写Java程序,应用客户端和服务端通过 Eclipse 控制台的输入和显示实现简易的聊天功能

    查看本章节 查看作业目录 需求说明: 应用客户端和服务端通过 Eclipse 控制台的输入和显示实现简易的聊天功能 实现思路: 创建 Java 项目,在项目中创建服务端类 ChatServerThre ...

  9. 编写Java程序,实现客户端向服务端上传文件的功能

    查看本章节 查看作业目录 需求说明: 实现客户端向服务端上传文件的功能 当启动服务端后,运行客户端程序,系统提示客户在客户端输入上传文件的完整路径.当客户在客户端输入完成后,服务端实现文件上传 实现思 ...

随机推荐

  1. docker入门、LXC、windows container 和 Hyper知识基础、实用情况

    虚拟机与容器 很明显可以看出两者在操作系统级别上的隔离和进程上的隔离的区别,VM因为隔离级别更高明显更重. linux容器主要技术特点: 文件系统隔离:每个容器都有自己的root文件系统 进程隔离:每 ...

  2. Hadoop集群之浅析安全模式

    集群启动顺序: NameNode启动 NameNode启动时,首先将镜像文件(Fsimage)载入内存,并执行编辑日志(Edits)中的各项操作.一旦在内存中成功建立文件系统元数据的映像,则创建一个新 ...

  3. Spring-boot 启动报错 调试小技巧

    描述: 我们在启动spring-boot,spring-cloud 项目时,是不是经常 遇到报错,但是在控制台 没有能找到 具体 报错信息,只是 提示,启动失败,缺乏具体的报错信息,这样就很不方便我们 ...

  4. 数据可视化之powerBI基础(十九)学会使用Power BI的参数,轻松搞定动态分析

    https://zhuanlan.zhihu.com/p/55295072 静态的分析经常不能满足实际分析的需要,还需要引入动态分析,通过调节某个维度的增减变化来观察对分析结果的影响.在PowerBI ...

  5. Ubuntu虚拟机设置共享文件夹

    Ubuntu虚拟机设置共享文件夹 注:个人笔记,小白笔记. 点击设置 进入到Ubuntu 中 cd /mnt/hgfs/ 后   我们会看到自己设置的共享文件夹.

  6. ASP.NET Core静态文件处理源码探究

    前言     静态文件(如 HTML.CSS.图像和 JavaScript)等是Web程序的重要组成部分.传统的ASP.NET项目一般都是部署在IIS上,IIS是一个功能非常强大的服务器平台,可以直接 ...

  7. Ethical Hacking - Web Penetration Testing(10)

    SQL INJECTION SQLMAP Tool designed to exploit SQL injections. Works with many DB types, MySQL, MSSQL ...

  8. Burp Suite Decoder Module - 解码模块

    官方参考链接:https://portswigger.net/burp/documentation/desktop/tools/decoder 该模块主要进行编码和解码,支持编码方式有:Plain,U ...

  9. K8s-Pod健康检查原理与实践

    Pod健康检查介绍 默认情况下,kubelet根据容器运行状态作为健康依据,不能监视容器中应用程序状态,例如程序假死.这将会导致无法提供服务,丢失流量.因此重新健康检查机制确保容器健康幸存.Pod通过 ...

  10. 你闺女也能看懂的插画版 Kubernetes 指南

    Matt Butcher是Deis的平台架构师,热爱哲学,咖啡和精雕细琢的代码.有一天女儿走进书房问他什么是Kubernetes,于是就有了这本插画版的Kubernetes指南,讲述了勇敢的Phipp ...