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. List的isEmpty与==null的区别

    集合的判空一般判定方法 ArrayList<Person> list = null; System.out.println(null == list);//return true Syst ...

  2. Java面向对象详解-上

    一.类及对象 1. 类的组成成分 属性(成员变量,Field) 方法(成员方法,函数,Method) 2. 属性 成员变量 vs 局部变量 相同点: 遵循变量声明的格式: 数据类型 变量名 = 初始化 ...

  3. redis源码学习之工作流程初探

    目录 背景 环境准备 下载redis源码 下载Visual Studio Visual Studio打开redis源码 启动过程分析 调用关系图 事件循环分析 工作模型 代码分析 动画演示 网络模块 ...

  4. Maven 专题(二):vscode 创建一个java Maven项目(vscode)以HdfsClientDemo 为例

    1.打开vs code软件,最好创建好自己的工程并使用vs code打开   2. 使用快捷键ctrl + shift + p按键,输入maven进行搜索,选中如图诉讼hi的create mavene ...

  5. pip install scrapy报错:error: Unable to find vcvarsall.bat解决方法

    今天在使用pip install scrapy 命令安装Scrapy爬虫框架时,出现了很让人头疼的错误,错误截图如下: 在网上查找解决方法时,大致知道了问题的原因.是因为缺少C语言的编译环境,其中一种 ...

  6. Knn和K-means

    先开个标题,以后慢慢填充. k近邻算法(knn)属于监督学习 一. 三个关键点:1.k的取值,当k值较小时,选取点较少,相当于会有在较小的范围内进行学习预测,学习误差会减小,但是估计误差会增大,因为训 ...

  7. TortoiseGit 解决冲突的两种方法

    一.冲突发生原因: 用户A 有新提交 用户B 没有pull, 写新代码 ,pull , 提示有冲突   Solution: 1: stash save(把自己的代码隐藏存起来) -> 重新pul ...

  8. oop的三种设计模式(单例、工厂、策略)

    参考网站 单例模式: 废话不多说,我们直接上代码: <?php /** 三私一公 *私有的静态属性:保存类的单例 *私有的__construct():阻止在类的外部实例化 *私有的__clone ...

  9. Ethical Hacking - NETWORK PENETRATION TESTING(15)

    ARP Poisoning - arpspoof Arpspoof is a tool part of a suit called dsniff, which contains a number of ...

  10. 线性dp 之 麻烦的聚餐

    题目描述 为了避免餐厅过分拥挤,FJ要求奶牛们分3批就餐.每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想,所有第3批就餐的奶牛排在队尾,队伍的前端由设定为第1批就餐的奶牛占据,中间的位置就归第2 ...