IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Java&socket实现客户端与客户端的联系 -> 正文阅读

[网络协议]Java&socket实现客户端与客户端的联系

作者:recommend-item-box type_blog clearfix

在这里插入图片描述

视频教程连接
server.java

package Server;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class server {
    public static List<Mychannel> list=new ArrayList<Mychannel>();

    public static void main(String[] args) throws IOException {
        System.out.println("服务器已开启");
        //创建sercersocket对象
        ServerSocket server=new ServerSocket(9999);
        //监听客户端是否有人连接
        while (true){
            Socket socket= server.accept();
            //创建线程类对象
            Mychannel mychannel=new Mychannel(socket);
            //将连接的mychannel添加到集合中
            list.add(mychannel);
            //启动线程
            new Thread(mychannel).start();
        }
    }
}

CloseUtil.java

package Server;

import java.io.Closeable;
import java.io.IOException;

public class CloseUtil {
    public static void CloseAll(Closeable...able) {
        for (Closeable closeable:able){
            if(closeable!=null){
                try {
                    closeable.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
        
    }
}

Mychannel.java

package Server;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.List;

public class Mychannel implements Runnable {

    private DataInputStream dis;
    private DataOutputStream dos;
    private boolean flag=true;

    public Mychannel(Socket client)  {
        try {
            dis=new DataInputStream(client.getInputStream());
            dos=new DataOutputStream(client.getOutputStream());
        }catch (IOException e){
            flag=false;
            CloseUtil.CloseAll(dis,dos);
        }
    }

    //接受数据的方法
    private String recevie(){
        String str="";
        try {
            str=dis.readUTF();
        }catch (IOException e){
            flag=false;
            CloseUtil.CloseAll(dis,dos);
            server.list.remove(this);
        }
        return str;
    }
        //发送数据的方法
    private void Send(String str){
        if(str!=null&&str.length()!=0){
            try {
                dos.writeUTF(str);
                dos.flush();
            }catch (IOException e){
                flag=false;
                CloseUtil.CloseAll(dos,dis);
                server.list.remove(this);
            }
        }
    }
    private void sendother(){
        String str=this.recevie();
        List<Mychannel> list=server.list;
        for (Mychannel other:list){
            if (other==this){
                continue;
            }
            other.Send(str);
        }
    }
    @Override
    public void run(){
        while (flag)
            sendother();
    }
}

Client.java

package Client;

import javax.sound.midi.MidiMessage;
import javax.sound.midi.Receiver;
import java.io.IOException;
import java.net.Socket;

public class Client {
    public static void main(String[] args) throws IOException {
        Socket client=new Socket("localhost",9999);

        ClientSend clientSend=new ClientSend(client);

        Receive receive=new Receive(client);

        new Thread(clientSend).start();
        new Thread(receive).start();
}
}

ClientSend.java

package Client;

import Server.CloseUtil;


import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class ClientSend implements Runnable{
    private BufferedReader br;

    private DataOutputStream dos;

    private boolean flag=true;
    public ClientSend(){
        br=new BufferedReader(new InputStreamReader(System.in));
    }
    public ClientSend(Socket client) {
        try {
            br=new BufferedReader(new InputStreamReader(System.in));
            dos=new DataOutputStream(client.getOutputStream());
        }catch (IOException e){
            flag=false;
            CloseUtil.CloseAll(dos,client);
        }
    }
    private String getMessage(){
        String str="";
        try {
            str=br.readLine();
        }catch (IOException e){
            flag=false;
            CloseUtil.CloseAll(br);
        }
        return str;
    }
    public void send(String str){
        try {
            dos.writeUTF(str);
            dos.flush();
        }catch (IOException e){
            flag=false;
            CloseUtil.CloseAll(dos);
        }
    }
    @Override
    public void run() {
        while (flag){
            this.send(getMessage());
        }
    }
}

Receive.java

package Client;


import Server.CloseUtil;

import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;

public class Receive  implements Runnable{
    private DataInputStream dis;
    private boolean flag=true;

    public Receive(Socket client) {
        try {
            dis=new DataInputStream(client.getInputStream());
        }catch (IOException e){
            flag=false;
            CloseUtil.CloseAll(dis,client);
        }
    }
    private String getMessage(){
        String str="";
        try {
            str=dis.readUTF();
        }catch (IOException e){
            flag=false;
            CloseUtil.CloseAll(dis);
        }
        return str;
    }
    @Override
    public void run(){
        while (flag){
            System.out.println(this.getMessage());
        }
    }
}

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-15 00:40:35  更:2022-04-15 00:43:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:44:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码