Socket编程——多对多客户端连接 (有问题需解决)

本文探讨了使用Java Socket编程实现多客户端间通信的问题。通过服务器作为中转站,客户端发送包含目标地址的数据包。在实际运行中,出现第二次信息传输不一致的错误,即客户端发送的信息未正确传递到服务器。文章提供了问题的现象和部分源代码,旨在寻求解决方案。
摘要由CSDN通过智能技术生成

Socket

实现效果

多个客户端通过服务器端相互之间进行通信。

概念

客户端多对多的实现的原理是把服务器作为一个中转站,中转站会会根据客户端的连接数量开辟用户线程,对接连接进来的客户端,客户端首先发送数据包给对接的用户线程, 数据包的内容包括

数据名 Value
from 信息起点
to 信息终点
info 发送信息
type 发送信息类型

把数据包包装成一个java类如下 Message.java:

package chat;

import java.io.Serializable;

public class Message implements Serializable {
   
    private String from;
    private String to;
    private String info;
    private int type;

    @Override
    public String toString() {
   
        return "Message{" +
                "from='" + from + '\'' +
                ", to='" + to + '\'' +
                ", info='" + info + '\'' +
                ", type=" + type +
                '}';
    }

    public Message(String from, String to, String info, int type) {
   
        this.from = from;
        this.to = to;
        this.info = info;
        this.type = type;
    }

    public void setFrom(String from) {
   
        this.from = from;
    }

    public void setTo(String to) {
   
        this.to = to;
    }

    public void setInfo(String info) {
   
        this.info = info;
    }

    public void setType(int type) {
   
        this.type = type;
    }

    public String getFrom() {
   
        return from;
    }

    public String getTo() {
   
        return to;
    }

    public String getInfo() {
   
        return info;
    }

    public int getType() {
   
        return type;
    }
}

服务器端收到数据包后,从to中获取要传送到的客户端,并且把数据包发送给与其对接的服务器端线程,最后服务器端线程会将信息发送给对应的客户端

原理图示

客户端1 服务器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值