当前位置: 首页 > 知识库问答 >
问题:

java中的多线程客户端-服务器聊天应用

诸葛雨泽
2023-03-14
ClientDemo.java

import java.io.*;
import java.net.Socket;

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/**
*
* @author zain-mughal
*/
public class ClientDemo extends javax.swing.JFrame {
DataInputStream input;
PrintWriter output;
public void Connect(){
    try {
        Socket s = new Socket("127.0.0.1", 2111);
        input=new DataInputStream(s.getInputStream());
        output=new PrintWriter(s.getOutputStream());
        boolean more_data=true;
        while(more_data){
            String in=input.readLine();
            if(in==null){
                more_data=false;
            }
            else{
                System.out.println(in);
            }
        }
        s.close();
        input.close();
        output.close();
    } catch (Exception ex) {
       ex.printStackTrace();
    }
}
public static void main(String args[]){
   ClientDemo obj=new ClientDemo();
   obj.Connect();

}

}

HServer.java

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/**
*
* @author zain-mughal
*/
public class HServer extends Thread {
Socket AcceptReQ;
public HServer(Socket reqAccept) {
    this.AcceptReQ=reqAccept;
}
@Override
public void run(){
    try {
        DataInputStream input = new DataInputStream(AcceptReQ.getInputStream());
        PrintWriter output = new PrintWriter(AcceptReQ.getOutputStream());
        String in=null;
        while((in=input.readLine())!=null){
                System.out.println(in);
        }

        AcceptReQ.close();
        input.close();
        output.close();
    } catch (Exception ex) {
        ex.printStackTrace();
    }
  }
 public static void main(String args[]){
    try {
        ServerSocket req = new ServerSocket(2111);

        while(true){
            Socket reqAccept=req.accept();
            Thread t=new HServer(reqAccept);
            t.start();
        }
    } catch (Exception ex) {
        Logger.getLogger(HServer.class.getName()).log(Level.SEVERE, null, ex);
    }
}
}

共有1个答案

伏子辰
2023-03-14

试试这个:

构建健壮的Java服务器

构建基本Echo服务器和ChatServer

 类似资料:
  • 本文向大家介绍Java多线程实现聊天客户端和服务器,包括了Java多线程实现聊天客户端和服务器的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java聊天室代码,供大家参考,具体内容如下 主要涉及知识 ·Java中GUI程序的编写,包括事件监听机制。 ·Java的网络通信编程,ServerSocket,Socket类的使用。 ·Java中多线程的编程,Thread类,Runnable

  • 服务器和客户端使用我自己的协议进行通信,看起来像XMPP。我应该实现聊天应用。因此,当一个用户编写String时,它应该立即通过服务器发送给其他客户端。我在服务器上有sendToAll方法。但用户只有在按下回车键时才能看到其他用户的消息。用户如何在不按回车键的情况下接收消息? 这是我的客户: 以及带有ServerThread的服务器。 服务器线程。

  • 问题内容: 服务器和客户端使用我自己的协议(类似于XMPP)进行通信。我应该实现聊天应用程序。因此,当一个用户写String时,应该立即将其通过服务器发送给其他客户端。我在服务器上有sendToAll方法。但是用户只有在按Enter时才能看到其他用户的消息。 用户如何在不按Enter键的情况下接收消息? 这是我的客户: 和带有ServerThread的服务器。 ServerThread。 问题答案

  • 我需要在netty中有一个客户机/服务器通信,用于我的项目目的之一。所以我刚开始用一个handsOn来改进,我正在学习netty,我是一个初学者。 我尝试了一个简单的客户端服务器与Netty聊天。 客户端和服务器正在初始化,我可以看到服务器能够获得用于建立连接的客户端管道,但是当客户端发送消息时,它没有进入ServerAdapterHandler的messageReceived部分。下面是我的源代

  • 我想在java上创建一个客户机/服务器应用程序,服务器的IP地址为192.168.1.100,在端口4500上等待客户机请求。 客户端从键盘上读取字符串,向服务器发送连接请求。一旦建立了连接,它就会将字符串发送到服务器。 这是我尝试的代码: 对于服务者: 对于客户端: 但这段代码有一个问题:

  • 我正在尝试使用线程池开发一个java聊天服务器,但我不知道如何处理来自客户端的传入消息。我想将每个套接字连接保存在哈希图中,并将任务添加到线程池的队列中。但是,服务器如何知道何时从客户端接收消息而不实例化缓冲区读取器?