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

时间:2022-11-12 15:21:14

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套接字基础&comma; 客户端与服务端通信&comma; 执行远端命令&period;

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

  5. Netty入门之客户端与服务端通信&lpar;二&rpar;

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

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

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

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

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

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

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

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

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

随机推荐

  1. android基础知识之一

    1:Android系统架构(重点) 分层的架构 JNI java native interface 1.application :应用层 : java 2.application framework ...

  2. spring bean初始化顺序

    转载:http://blog.csdn.net/heyutao007/article/details/50326793 常用的设定方式有以下三种:通过实现 InitializingBean/Dispo ...

  3. html css布局

    这几天有点急于求成了,原来每一门技术都像大海,只有深入其中才发现它比看到的更要深广的多. 虽然忙里偷闲的看了HTML5,NODE.JS,JAVASCRIPT核心等许多东西,但是真正掌握的不足十分之一, ...

  4. 畅通工程 HDOJ--1863

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. android中使用DisplayMetrics获取屏幕参数

    --关于Density int android.graphics.Bitmap.getDensity(),返回bitmap-density(密度).默认的density就是当前display-dens ...

  6. on方法使用注意事项

    on(eventType,[childSelector],[data],fn) 采用事件委托机制绑定事件,好处是子元素动态加入时无需再次绑定. on方法可以传入childSelector指定添加事件处 ...

  7. java中继承和组合的区别

    子类继承父类,父类的所有属性和方法都可以被子类访问和调用.组合是指将已存在的类型作为一个新建类的成员变量类型,又叫"对象持有". 通过组合和继承,都可以实现系统功能的重用和代码的复 ...

  8. SQLite学习手册&lpar;实例代码&lt&semi;一&gt&semi;&rpar;

    一.获取表的Schema信息:       1). 动态创建表.     2). 根据sqlite3提供的API,获取表字段的信息,如字段数量以及每个字段的类型.     3). 删除该表.     ...

  9. 关于if和else嵌套—蛋疼

    嵌套使用的时候else if和else遵循就近原则,和上面最靠近该语句的if语句匹配,要把else if看成是一个整体.就这么干,这样好理解一点. 一个if...else if...else语句中可以 ...

  10. WPF ViewModel与多个View绑定后如何解决的问题

    当重复创建View并绑定同一个ViewModel后,ViewModel中的字段更新,在新的View中的没有反应或者在View中找不到相应的视觉树(如ListBox的ListBoxItem) 初始的解决 ...