TCP通信---实现 群聊

群聊:
当有 客户机 给 服务器 发消息时,
这个消息必须 同时被发送到 其他的客户机。(注意:并不是直接让客户机之间进行连接,而是服务器在中间传)

一、构想:
1.QQ怎么运作?
首先,用户需要 通过验证 加入到某一个群;
加入之后,每个用户都会有自己的一个聊天室界面,
这个界面中实时更新所有群成员发送的消息。

2.框架图:

2.1.整体:在这里插入图片描述2.2.服务器和单一客户机交互图:

2.2.1.用户信息正确:
在这里插入图片描述

2.2.2.用户信息错误:
在这里插入图片描述
二、代码架构
根据以上,
感觉只需构建 服务器 和 客户机 这2个类就可实现这个聊天室。
但这样一来就会造成这2个类中包含了 过多方法,
有悖于面向对象的“单一职责原则”。
不利于后期对 这个程序 修改扩展。
因此这里我们对 这2个类 进行了更加仔细的 职责划分。
总共分成以下5个类:

ChatServer类:
	服务器类,主类
	包含————服务器的创建方法setUpServer(int port) 和 主函数入口main
	
		当程序开始运行,以上方法把 相应的端口port 设置为 服务器
		并让其始终处于 待连接状态。
		
		每当有 1个客户机连接上来,就实例化1个线程类(ServerThread)对象
		并启动1个线程去处理=为每个用户提供了1个独立的线程。



ServerThread类:
	客户端类,线程类。
	包含————实现了线程的启动方法run() 和 客户机服务器的通信处理方法processSocket()
		
		当然在通信之前
		我们必须要先验证这个用户信息是否正确
		这个验证方法我们在 DaoTool类 中实现。这里直接调用它的验证方法即可。



DaoTool:
	用户信息验证类。
	包含————实现了用户信息的验证方法checkLogin()。
		   它还储存了1个模拟的用户信息库userDB。



UserInfo:
	用户信息类。
	包含————保存了每1个用户的信息,包括用户名和密码。
	       定义了获取用户名和密码的方法。



ChatTools:
	聊天室类。
	包含————负责保存当前登录的每一个用户,
	  
	       当某1个客户机给服务器发了消息,
	       它需要立即把这条消息转发给其他客户机。

按以上 的构图如下:
在这里插入图片描述

三、撸代码:
1.创建ChatServer

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

/**
 * 服务器
 */
public class ChatServer {
   

    public static void main(String[] args) throws IOException {
   
        ChatServer cs = new ChatServer();
        cs.setUpServer(7777);
    }



    public void setUpServer(int port) throws IOException {
   
        ServerSocket ss = new ServerSocket(port);
        System.out.println("服务器创建成功!端口号为:"+port);

        while(true){
   //一直监听等待
            Socket client = ss.accept();//获取进入的客户机
            System.out.println("进入了1个客户机连接:"+client.getRemoteSocketAddress().toString());<
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Ubuntu中实现TCP可以通过以下步骤实现: 1. 建立一个TCP服务器:使用Python编写TCP服务器,绑定到一个IP地址和端口号。当有客户端连接到该服务器时,服务器将创建一个新的套接字,以便与连接的客户端通信。 2. 实现服务器接收消息:当有客户端通过TCP连接到服务器时,服务器可以监听并接收客户端发送的消息。这可以通过编写一个无限循环来实现,该循环等待客户端发送消息,然后将其广播到所有连接的客户端。 3. 处理并发送客户端消息:当某个客户端想要向群发送消息时,应该通过TCP连接到服务器并将该消息广播给所有连接的客户端。服务器将确保该消息被正确处理和发送。 4. 客户端连接到服务器:客户端通过TCP连接到服务器,然后发送和接收消息。客户端可以使用Python编写,需要提供IP地址和端口号连接到服务器。 总之,在ubuntu中实现TCP需要理解TCP协议,以及如何使用Python编写TCP服务器和客户端。务必确保正确处理和发送消息,以确保可以实现成功的群功能。 ### 回答2: 在Ubuntu中实现TCP需要使用一个TCP服务器来接收客户端的连接和消息,然后将消息广播给所有连接到服务器的客户端。 首先需要使用Socket API编写一个TCP服务器程序,可以使用C语言或Python等编程语言。服务器程序需要监听一个固定的端口,等待客户端连接。当客户端连接上来后,服务器就需要开启一个新的线程来处理这个客户端的消息,防止阻塞其他客户端的连接。 在客户端,需要先连接到服务器,然后可以发送消息给服务器。服务器收到消息后,需要遍历所有连接的客户端,并且发送消息给客户端。需要注意的是,服务器需要对收到的消息进行解析和处理,比如判断消息类型和内容等。 在实现时,可以创建一个天室,每个客户端都可以加入或离开天室。当某个客户端发送消息时,服务器则广播这个消息给天室内的所有客户端。客户端可以通过指令发送消息或执行其他操作,比如查看在线用户列表或退出天室等。 总之,在Ubuntu中实现TCP需要编写服务器程序和客户端程序,并且设计消息的传输格式和处理逻辑。可以根据具体需要自己定制协议和功能。 ### 回答3: 在Ubuntu中实现TCP需要通过编程的方式,在终端使用TCP socket进行通信。以下是实现方法: 1.创建一个主服务器程序,绑定一个IP地址和端口号,并使用socket()系统调用创建套接字。将socket与IP地址和端口号绑定,并使用listen()函数监听连接请求。 2.创建多个子客户端程序,每个程序都使用同样的IP地址和端口号与主服务器程序连接。使用socket()函数进行套接字创建,并使用connect()加入主服务器。 3.当客户端连接时,主服务器将为每个客户端创建一个新的socket,并使用fork()进行进程复制。在子进程中,与客户端建立连接,并使用send()函数将欢迎消息发送给客户端。此后,父进程可以等待下一个客户端的连接请求。 4.客户端程序可以使用socket()函数创建套接字,并使用connect()函数连接到主服务器。一旦建立连接,可以使用recv()函数从主服务器接收消息,并使用send()函数将消息发送到主服务器。 5.在收到消息后,主服务器将消息广播给所有已连接的客户端,使用send()函数将消息发送给每个客户端。 6.客户端收到消息后,将其显示在屏幕上,并等待下一条消息。如果客户端想要退出,可以使用exit()函数从主服务器断开连接。 以上就是在Ubuntu中实现TCP的基本思路和实现方法。在实际实现中,还需要考虑并发性、错误处理和线程安全等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值