精华内容
下载资源
问答
  • 本文实例为大家分享了java群聊功能,供大家参考,具体内容如下Java 对TCP协议的支持:--> java.net包中定义了两个类ServerSocket 和Socket ,分别用来实现双向连接的server 端和client 端。--> Client 类定义...

    本文实例为大家分享了java群聊功能,供大家参考,具体内容如下

    Java 对TCP协议的支持:--> java.net包中定义了两个类ServerSocket 和Socket ,分别用来实现双向连接的server 端和client 端。

    --> Client 类定义客户端

    package com.dragon.java.tcpchat;

    import java.io.IOException;

    import java.net.Socket;

    import java.net.UnknownHostException;

    /**

    * 客户端

    *

    * @author Auser

    *

    */

    public class Client {

    public static void main(String args[]) throws UnknownHostException,

    IOException {

    Socket client = new Socket("192.168.1.188", 10000);

    // 穿件发送信息的线程

    new ClientSend(client).start();

    // 创建接收信息的线程

    new ClientReceive(client).start();

    // 因为要实现聊天功能,而不是只发送一次信息,所以输出流和客户端都不能关闭。

    // client.shutdownOutput();

    // client.close();

    }

    }

    --> ClientSend 类 定义客户端向服务端发送信息的线程

    package com.dragon.java.tcpchat;

    import java.io.IOException;

    import java.io.PrintStream;

    import java.net.Socket;

    import java.util.Scanner;

    /**

    * 客户端向服务端发送信息的线程

    *

    * @author Auser

    *

    */

    public class ClientSend extends Thread {

    private Scanner scanner;

    private Socket socket;

    public ClientSend(Socket socket) {

    this.socket = socket;

    }

    @Override

    public void run() {

    scanner = new Scanner(System.in);

    try {

    PrintStream ps = new PrintStream(socket.getOutputStream());

    String line = "";

    // 阻塞式发送信息

    while ((line = scanner.nextLine()) != null) {

    ps.println(line);

    }

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    --> ClientReceive 类 定义客户端接收服务端信息的线程

    package com.dragon.java.tcpchat;

    import java.io.BufferedReader;

    import java.io.InputStreamReader;

    import java.net.Socket;

    /**

    * 客户端接收信息的线程

    *

    * @author Auser

    *

    */

    public class ClientReceive extends Thread {

    private Socket socket;

    public ClientReceive(Socket socket) {

    this.socket = socket;

    }

    @Override

    public void run() {

    try {

    BufferedReader br = new BufferedReader(new InputStreamReader(

    socket.getInputStream()));

    // 按行接收信息

    String line = "";

    while ((line = br.readLine()) != null) {

    System.out.println(line);

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    }

    --> Server 类定义服务端

    package com.dragon.java.tcpchat;

    import java.io.IOException;

    import java.net.ServerSocket;

    import java.net.Socket;

    import java.util.ArrayList;

    import java.util.List;

    /**

    * 服务器

    *

    * @author Auser

    *

    */

    public class Server {

    public static void main(String[] args) throws IOException,

    InterruptedException {

    List list = new ArrayList<>();

    // 创建服务器端的套接字

    ServerSocket server = new ServerSocket(10000);

    while (true) {

    // 接收客户端的阻塞方法

    Socket socket = server.accept();

    // 设计到多个线程可能会对集合进行增删的操作,要进行同步的处理

    synchronized (list) {

    list.add(socket);

    }

    // 启动一个新的线程去处理这个客户端的交流

    new HandleSocket(socket, list).start();

    }

    // 因为不知道客户端什么时候发送信息,所以服务端要一直开启不能关闭。

    }

    }

    --> HandleSocket 类对连接到服务端的客户端进行操作(上下线通知、屏蔽拉黑、将信息发送到每个客户端等...)

    package com.dragon.java.tcpchat;

    import java.io.BufferedReader;

    import java.io.IOException;

    import java.io.InputStreamReader;

    import java.io.PrintStream;

    import java.net.InetAddress;

    import java.net.Socket;

    import java.util.List;

    /**

    * 处理每个(单个)连接到服务器的客户端的线程

    *

    * @author Auser

    *

    */

    public class HandleSocket extends Thread {

    private Socket socket;

    private List list;

    /**

    * 构造方法

    *

    * @param socket

    * 当前连接的客户端

    * @param list

    * 存储已连接客户端的集合

    */

    public HandleSocket(Socket socket, List list) {

    this.socket = socket;

    this.list = list;

    }

    /**

    * 线程run方法

    */

    @Override

    public void run() {

    InetAddress address = socket.getInetAddress(); // 获取连接到服务器的这的客户端的地址

    String ip = address.getHostAddress();

    System.out.println(ip + "上线了!");

    if (ip.equals("192.168.1.117")) {

    synchronized (list) {

    sendToAll(ip + "由于违规操作,已被拉入黑名单!");

    list.remove(socket);

    }

    return;

    }

    try {

    BufferedReader br = new BufferedReader(new InputStreamReader(

    socket.getInputStream(), "gbk"));

    String line = "";

    while ((line = br.readLine()) != null) {

    String msg = ip + ":" + line;

    System.out.println(msg); // 输出到服务器端的控制台

    // 把这个客户端说的话,发给其他所有的客户端

    sendToAll(msg);

    }

    } catch (IOException e) {

    // e.printStackTrace();

    System.out.println(ip + "下线了!");

    synchronized (list) {

    list.remove(socket);

    }

    }

    }

    /**

    * 把信息发送给所有的客户端,去除当前socket

    *

    * @param msg

    * 发送的信息

    */

    private void sendToAll(String msg) {

    synchronized (list) {

    for (Socket s : list) {

    if (s != socket) {

    try {

    PrintStream ps = new PrintStream(s.getOutputStream());

    ps.println();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    }

    }

    }

    --> 注意:因为要实现客户端连接到服务端,即客户端要先找到服务端,所以服务端要先开启,再开启服务端...

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • 本文实例为大家分享了java群聊功能,供大家参考,具体内容如下Java 对TCP协议的支持:--> java.net包中定义了两个类ServerSocket 和Socket ,分别用来实现双向连接的server 端和client 端。--> Client 类定义...

    本文实例为大家分享了java群聊功能,供大家参考,具体内容如下

    Java 对TCP协议的支持:

    --> java.net包中定义了两个类ServerSocket 和Socket ,分别用来实现双向连接的server 端和client 端。

    --> Client 类定义客户端

    package com.dragon.java.tcpchat;

    import java.io.IOException;

    import java.net.Socket;

    import java.net.UnknownHostException;

    /**

    * 客户端

    *

    * @author Auser

    *

    */

    public class Client {

    public static void main(String args[]) throws UnknownHostException,

    IOException {

    Socket client = new Socket("192.168.1.188", 10000);

    // 穿件发送信息的线程

    new ClientSend(client).start();

    // 创建接收信息的线程

    new ClientReceive(client).start();

    // 因为要实现聊天功能,而不是只发送一次信息,所以输出流和客户端都不能关闭。

    // client.shutdownOutput();

    // client.close();

    }

    }

    --> ClientSend 类 定义客户端向服务端发送信息的线程

    package com.dragon.java.tcpchat;

    import java.io.IOException;

    import java.io.PrintStream;

    import java.net.Socket;

    import java.util.Scanner;

    /**

    * 客户端向服务端发送信息的线程

    *

    * @author Auser

    *

    */

    public class ClientSend extends Thread {

    private Scanner scanner;

    private Socket socket;

    public ClientSend(Socket socket) {

    this.socket = socket;

    }

    @Override

    public void run() {

    scanner = new Scanner(System.in);

    try {

    PrintStream ps = new PrintStream(socket.getOutputStream());

    String line = "";

    // 阻塞式发送信息

    while ((line = scanner.nextLine()) != null) {

    ps.println(line);

    }

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    --> ClientReceive 类 定义客户端接收服务端信息的线程

    package com.dragon.java.tcpchat;

    import java.io.BufferedReader;

    import java.io.InputStreamReader;

    import java.net.Socket;

    /**

    * 客户端接收信息的线程

    *

    * @author Auser

    *

    */

    public class ClientReceive extends Thread {

    private Socket socket;

    public ClientReceive(Socket socket) {

    this.socket = socket;

    }

    @Override

    public void run() {

    try {

    BufferedReader br = new BufferedReader(new InputStreamReader(

    socket.getInputStream()));

    // 按行接收信息

    String line = "";

    while ((line = br.readLine()) != null) {

    System.out.println(line);

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    }

    --> Server 类定义服务端

    package com.dragon.java.tcpchat;

    import java.io.IOException;

    import java.net.ServerSocket;

    import java.net.Socket;

    import java.util.ArrayList;

    import java.util.List;

    /**

    * 服务器

    *

    * @author Auser

    *

    */

    public class Server {

    public static void main(String[] args) throws IOException,

    InterruptedException {

    List list = new ArrayList<>();

    // 创建服务器端的套接字

    ServerSocket server = new ServerSocket(10000);

    while (true) {

    // 接收客户端的阻塞方法

    Socket socket = server.accept();

    // 设计到多个线程可能会对集合进行增删的操作,要进行同步的处理

    synchronized (list) {

    list.add(socket);

    }

    // 启动一个新的线程去处理这个客户端的交流

    new HandleSocket(socket, list).start();

    }

    // 因为不知道客户端什么时候发送信息,所以服务端要一直开启不能关闭。

    }

    }

    --> HandleSocket 类对连接到服务端的客户端进行操作(上下线通知、屏蔽拉黑、将信息发送到每个客户端等...)

    package com.dragon.java.tcpchat;

    import java.io.BufferedReader;

    import java.io.IOException;

    import java.io.InputStreamReader;

    import java.io.PrintStream;

    import java.net.InetAddress;

    import java.net.Socket;

    import java.util.List;

    /**

    * 处理每个(单个)连接到服务器的客户端的线程

    *

    * @author Auser

    *

    */

    public class HandleSocket extends Thread {

    private Socket socket;

    private List list;

    /**

    * 构造方法

    *

    * @param socket

    * 当前连接的客户端

    * @param list

    * 存储已连接客户端的集合

    */

    public HandleSocket(Socket socket, List list) {

    this.socket = socket;

    this.list = list;

    }

    /**

    * 线程run方法

    */

    @Override

    public void run() {

    InetAddress address = socket.getInetAddress(); // 获取连接到服务器的这的客户端的地址

    String ip = address.getHostAddress();

    System.out.println(ip + "上线了!");

    if (ip.equals("192.168.1.117")) {

    synchronized (list) {

    sendToAll(ip + "由于违规操作,已被拉入黑名单!");

    list.remove(socket);

    }

    return;

    }

    try {

    BufferedReader br = new BufferedReader(new InputStreamReader(

    socket.getInputStream(), "gbk"));

    String line = "";

    while ((line = br.readLine()) != null) {

    String msg = ip + ":" + line;

    System.out.println(msg); // 输出到服务器端的控制台

    // 把这个客户端说的话,发给其他所有的客户端

    sendToAll(msg);

    }

    } catch (IOException e) {

    // e.printStackTrace();

    System.out.println(ip + "下线了!");

    synchronized (list) {

    list.remove(socket);

    }

    }

    }

    /**

    * 把信息发送给所有的客户端,去除当前socket

    *

    * @param msg

    * 发送的信息

    */

    private void sendToAll(String msg) {

    synchronized (list) {

    for (Socket s : list) {

    if (s != socket) {

    try {

    PrintStream ps = new PrintStream(s.getOutputStream());

    ps.println();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    }

    }

    }

    --> 注意:因为要实现客户端连接到服务端,即客户端要先找到服务端,所以服务端要先开启,再开启服务端...

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持聚米学院。

    展开全文
  • java实现群聊功能

    2011-03-29 00:10:36
    java语言实现群聊系统的啦,绝对能用,放心。。。。。。。。
  • java swing实现群聊功能

    2018-07-11 16:18:50
    群聊功能。使用java swing,socket,多线程实现。 1) 客户端用来接收和展示数据,服务器实现与底层数据的交互。 2) 实现服务器端与客户端的分离,如果要操作数据库,可以在服务器端改代码调用Model。 3) 实现用户...
  • packagecom.dragon.java.tcpchat;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintStream;importjava.net.InetAddress;importjava.net.Socket;importj...

    packagecom.dragon.java.tcpchat;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintStream;importjava.net.InetAddress;importjava.net.Socket;importjava.util.List;/*** 处理每个(单个)连接到服务器的客户端的线程

    *

    *@authorAuser

    **/

    public class HandleSocket extendsThread {privateSocket socket;private Listlist;/*** 构造方法

    *

    *@paramsocket

    * 当前连接的客户端

    *@paramlist

    * 存储已连接客户端的集合*/

    public HandleSocket(Socket socket, Listlist) {this.socket =socket;this.list =list;

    }/*** 线程run方法*/@Overridepublic voidrun() {

    InetAddress address= socket.getInetAddress(); //获取连接到服务器的这的客户端的地址

    String ip =address.getHostAddress();

    System.out.println(ip+ "上线了!");if (ip.equals("192.168.1.117")) {synchronized(list) {

    sendToAll(ip+ "由于违规操作,已被拉入黑名单!");

    list.remove(socket);

    }return;

    }try{

    BufferedReader br= new BufferedReader(newInputStreamReader(

    socket.getInputStream(),"gbk"));

    String line= "";while ((line = br.readLine()) != null) {

    String msg= ip + ":" +line;

    System.out.println(msg);//输出到服务器端的控制台//把这个客户端说的话,发给其他所有的客户端

    sendToAll(msg);

    }

    }catch(IOException e) {//e.printStackTrace();

    System.out.println(ip + "下线了!");synchronized(list) {

    list.remove(socket);

    }

    }

    }/*** 把信息发送给所有的客户端,去除当前socket

    *

    *@parammsg

    * 发送的信息*/

    private voidsendToAll(String msg) {synchronized(list) {for(Socket s : list) {if (s !=socket) {try{

    PrintStream ps= newPrintStream(s.getOutputStream());

    ps.println();

    }catch(IOException e) {

    e.printStackTrace();

    }

    }

    }

    }

    }

    }

    展开全文
  • 本文实例为大家分享了java群聊功能,供大家参考,具体内容如下java 对tcp协议的支持:--> java.net包中定义了两个类serversocket 和socket ,分别用来实现双向连接的server 端和client 端。--> client 类定义...

    本文实例为大家分享了java群聊功能,供大家参考,具体内容如下

    java 对tcp协议的支持:--> java.net包中定义了两个类serversocket 和socket ,分别用来实现双向连接的server 端和client 端。

    --> client 类定义客户端

    package com.dragon.java.tcpchat;

    import java.io.ioexception;

    import java.net.socket;

    import java.net.unknownhostexception;

    /**

    * 客户端

    *

    * @author auser

    *

    */

    public class client {

    public static void main(string args[]) throws unknownhostexception,

    ioexception {

    socket client = new socket("192.168.1.188", 10000);

    // 穿件发送信息的线程

    new clientsend(client).start();

    // 创建接收信息的线程

    new clientreceive(client).start();

    // 因为要实现聊天功能,而不是只发送一次信息,所以输出流和客户端都不能关闭。

    // client.shutdownoutput();

    // client.close();

    }

    }

    --> clientsend 类 定义客户端向服务端发送信息的线程

    package com.dragon.java.tcpchat;

    import java.io.ioexception;

    import java.io.printstream;

    import java.net.socket;

    import java.util.scanner;

    /**

    * 客户端向服务端发送信息的线程

    *

    * @author auser

    *

    */

    public class clientsend extends thread {

    private scanner scanner;

    private socket socket;

    public clientsend(socket socket) {

    this.socket = socket;

    }

    @override

    public void run() {

    scanner = new scanner(system.in);

    try {

    printstream ps = new printstream(socket.getoutputstream());

    string line = "";

    // 阻塞式发送信息

    while ((line = scanner.nextline()) != null) {

    ps.println(line);

    }

    } catch (ioexception e) {

    e.printstacktrace();

    }

    }

    }

    --> clientreceive 类 定义客户端接收服务端信息的线程

    package com.dragon.java.tcpchat;

    import java.io.bufferedreader;

    import java.io.inputstreamreader;

    import java.net.socket;

    /**

    * 客户端接收信息的线程

    *

    * @author auser

    *

    */

    public class clientreceive extends thread {

    private socket socket;

    public clientreceive(socket socket) {

    this.socket = socket;

    }

    @override

    public void run() {

    try {

    bufferedreader br = new bufferedreader(new inputstreamreader(

    socket.getinputstream()));

    // 按行接收信息

    string line = "";

    while ((line = br.readline()) != null) {

    system.out.println(line);

    }

    } catch (exception e) {

    e.printstacktrace();

    }

    }

    }

    --> server 类定义服务端

    package com.dragon.java.tcpchat;

    import java.io.ioexception;

    import java.net.serversocket;

    import java.net.socket;

    import java.util.arraylist;

    import java.util.list;

    /**

    * 服务器

    *

    * @author auser

    *

    */

    public class server {

    public static void main(string[] args) throws ioexception,

    interruptedexception {

    list list = new arraylist<>();

    // 创建服务器端的套接字

    serversocket server = new serversocket(10000);

    while (true) {

    // 接收客户端的阻塞方法

    socket socket = server.accept();

    // 设计到多个线程可能会对集合进行增删的操作,要进行同步的处理

    synchronized (list) {

    list.add(socket);

    }

    // 启动一个新的线程去处理这个客户端的交流

    new handlesocket(socket, list).start();

    }

    // 因为不知道客户端什么时候发送信息,所以服务端要一直开启不能关闭。

    }

    }

    --> handlesocket 类对连接到服务端的客户端进行操作(上下线通知、屏蔽拉黑、将信息发送到每个客户端等...)

    package com.dragon.java.tcpchat;

    import java.io.bufferedreader;

    import java.io.ioexception;

    import java.io.inputstreamreader;

    import java.io.printstream;

    import java.net.inetaddress;

    import java.net.socket;

    import java.util.list;

    /**

    * 处理每个(单个)连接到服务器的客户端的线程

    *

    * @author auser

    *

    */

    public class handlesocket extends thread {

    private socket socket;

    private list list;

    /**

    * 构造方法

    *

    * @param socket

    * 当前连接的客户端

    * @param list

    * 存储已连接客户端的集合

    */

    public handlesocket(socket socket, list list) {

    this.socket = socket;

    this.list = list;

    }

    /**

    * 线程run方法

    */

    @override

    public void run() {

    inetaddress address = socket.getinetaddress(); // 获取连接到服务器的这的客户端的地址

    string ip = address.gethostaddress();

    system.out.println(ip + "上线了!");

    if (ip.equals("192.168.1.117")) {

    synchronized (list) {

    sendtoall(ip + "由于违规操作,已被拉入黑名单!");

    list.remove(socket);

    }

    return;

    }

    try {

    bufferedreader br = new bufferedreader(new inputstreamreader(

    socket.getinputstream(), "gbk"));

    string line = "";

    while ((line = br.readline()) != null) {

    string msg = ip + ":" + line;

    system.out.println(msg); // 输出到服务器端的控制台

    // 把这个客户端说的话,发给其他所有的客户端

    sendtoall(msg);

    }

    } catch (ioexception e) {

    // e.printstacktrace();

    system.out.println(ip + "下线了!");

    synchronized (list) {

    list.remove(socket);

    }

    }

    }

    /**

    * 把信息发送给所有的客户端,去除当前socket

    *

    * @param msg

    * 发送的信息

    */

    private void sendtoall(string msg) {

    synchronized (list) {

    for (socket s : list) {

    if (s != socket) {

    try {

    printstream ps = new printstream(s.getoutputstream());

    ps.println();

    } catch (ioexception e) {

    e.printstacktrace();

    }

    }

    }

    }

    }

    }

    --> 注意:因为要实现客户端连接到服务端,即客户端要先找到服务端,所以服务端要先开启,再开启服务端...

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

    如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

    展开全文
  • 简单的聊天室功能,基于java的Socket,swing,线程
  • 1.服务器端代码import java.io.IOException;import java.net.InetSocketAddress;import java.net.ServerSocket;import java.nio.ByteBuffer;import java.nio.channels.Channel;import java.nio.channels....
  • 主要介绍了java利用TCP协议实现小型局域网群聊功能(C/S模式) ,感兴趣的小伙伴们可以参考一下
  • 我们小组大二做的一个简单的聊天系统,分为服务器端和客户端,启动服务器端之后,客户端之间进行收发信息,还有群组聊天功能。完整的项目描述见压缩包内的报告和源码。使用mysql数据库,已导出为qq.sql文件。 解压...
  • Java网络编程,模拟QQ群聊功能

    千次阅读 2020-07-01 18:16:23
    Java网络编程,模拟QQ群聊功能 一、网络编程知识点简介: 1.C/S架构:Client客户端/Server服务器: 涉及到的应用:桌面的应用软件,QQ,王者荣耀 涉及到的技术:Socket网络编程 2.网络: 各个孤立的工作站或主机相连在...
  • Java网络编程:TCP实现群聊功能代码 实现的功能:群聊 具体操作流程的大致思路: 某个客户端发送消息,服务器将该消息转发给其余客户端(除了自己)。 代码一共分两个端(服务器和客户端(其中客户端一共3个代码))...
  • Java 简单模拟聊天功能群聊 废话不多说直接上代码吧 首先是服务器端 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; ...
  • Java网络编程–TCP+多线程 实现聊天室群聊功能 功能描述: 简单的聊天室,可以有多个用户同时加入聊天,每个用户可以随时发送消息,其他用户都会收到该用户的信息(显示发送者姓名) 分析: 1.采用TCP实现,服务端...
  • import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.nio.ByteBuffer; import java.nio.channels.Channel; import java.nio.channels.Selectio
  • 代码分为了三部分:客户端代码、...import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; import java.net.UnknownHostException; /** * 创
  • 这是这个网络聊天室项目的原理图:很简单,首先ABCD是4个客户端,当A发送信息给服务器,服务器实现以广播的形式把信息全发给每个人---群发群聊客户端代码:package com.aa;import java.awt.Color;import java.awt....
  • 预备小知识连接: 小小聊天室,慢慢的回忆啊!(TCP 通信实现) 先看效果 主要可以分为三个层:服务端层,客户端...import java.io.Closeable; import java.io.IOException; /** * 用于关闭的工具类 * */ publ
  • 一对一单聊的实现:客户端带着发送方ID和接收方ID、信息发送给服务端,服务端从socket池中找出接收方ID进行转发。 群发的实现:客户端发送群发消息给服务端,然后服务端从socket池中取出所有正在...import java....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 628
精华内容 251
关键字:

java群聊功能

java 订阅