【JavaSocket编程】实现P2P客户端与服务器端双向传输数据(附代码)

简介: java实现P2P通信

 先看实现效果:

image.gif编辑

image.gif编辑

核心思想:

1使用socket建立连接

2客户端和服务器端分别创建两个进程,通过soccket来进行数据的发送和接收

话不多说,直接上代码

#客户端

package test;
import java.io.*;
import java.net.*;
import java.util.*;
public class TestClient {
    public static void main(String[] args) {
        try {//建立一个socket进行通信
            Socket socket=new Socket("localhost",8001);
            System.out.println("开启客户端");
            Thread thread1=new Thread(){//线程1重写run函数,用于接受数据
                @Override
                public void run(){
                    try {
                        InputStream i1=socket.getInputStream();
                        DataInputStream in1=new DataInputStream(i1);
                        while(true)//建立封装输入流,随后用true不断读取数据
                        {
                            String s1=in1.readUTF();
                            System.out.println("客户端:我收到的数据是:"+s1);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            };
            Thread thread2=new Thread()
            {//建立封装输出,随后使用true不断进行输出
                @Override
                public void run(){
                    try {
                        OutputStream o1=socket.getOutputStream();
                        DataOutputStream out1=new DataOutputStream(o1);
                        Scanner sca1=new Scanner(System.in);
                        while(true)
                        {
                            String s3=sca1.next();
                            out1.writeUTF(s3);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            };
            thread1.start();
            thread2.start();
            try {
                thread1.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("客户端关闭了");
            socket.close();
        } catch (IOException e) {
            System.out.println("断开连接");
            e.printStackTrace();
        }
    }
}

image.gif

#服务器端

package test;
import java.io.*;
import java.net.*;
import java.util.*;
public class TestServer {
    public static void main(String[] args) {
        //1建立连接
        try {
           ServerSocket serverSocket = new ServerSocket(8001);
            System.out.println("开启服务端");
            Socket s =serverSocket.accept();//等待建立连接
            System.out.println("有连接过来了"+s);
            Thread thread1=new Thread(){//线程1收入数据
                @Override
                public void run(){
                    try {
                        InputStream i1=s.getInputStream();
                        DataInputStream in1=new DataInputStream(i1);
                        while(true)//建立封装输入流,随后用true不断读取数据
                        {
                            String s1=in1.readUTF();
                            System.out.println("服务端:我收到的数据是:"+s1);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            };
            Thread thread2=new Thread()
            {//建立封装输出,随后使用true不断输出
                @Override
                public void run(){
                    try {
                        OutputStream o1=s.getOutputStream();
                        DataOutputStream out1=new DataOutputStream(o1);
                        Scanner sca1=new Scanner(System.in);
                        while(true)
                        {
                            String s3=sca1.next();
                            out1.writeUTF(s3);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            };
            thread1.start();
            thread2.start();
            try {
                thread1.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("客户端关闭了");
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

image.gif


目录
相关文章
|
21天前
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
128 15
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
2月前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
46 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
2月前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
56 3
|
3月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
180 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
2月前
|
存储 运维 算法
服务器数据恢复—raid6阵列硬盘重组raid5阵列如何恢复raid6阵列数据?
服务器存储数据恢复环境: 存储中有一组由12块硬盘组建的RAID6阵列,上层linux操作系统+EXT3文件系统,该存储划分3个LUN。 服务器存储故障&分析: 存储中RAID6阵列不可用。为了抢救数据,运维人员使用原始RAID中的部分硬盘重新组建RAID并进行了初始化。 初始化开始一段时间后,运维人员察觉到情况有异后强制终止初始化,这个时候初始化已经完成一半以上。数据部分已被不可逆的破坏。
|
3月前
|
存储 数据挖掘
服务器数据恢复—用RAID5阵列中部分盘重建RAID5如何恢复原raid5阵列数据?
服务器数据恢复环境: 一台服务器挂接一台存储,该存储中有一组由5块硬盘组建的RAID5阵列。 服务器故障: 存储raid5阵列中有一块硬盘掉线。由于RAID5的特性,阵列并没有出现问题。工作一段时间后,服务器出现故障,用户方请人维修。维修人员在没有了解故障磁盘阵列环境的情况下,用另外4块硬盘(除去掉线的硬盘)重新创建了一组全新的RAID5阵列并完成数据同步,导致原raid5阵列数据全部丢失。
|
3月前
|
网络协议 Unix Linux
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
105 4
|
3月前
|
Python
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
这篇博客文章是关于如何使用Flask框架上传特征值数据到服务器端,并将其保存为txt文件的教程。
38 0
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
|
3月前
|
安全 区块链 数据库
|
3月前
|
弹性计算 网络协议 Linux
云服务器评估迁移时间与测试传输速度
云服务器评估迁移时间与测试传输速度