我想实现类似QQ聊天的服务器端功能,怎么做呢?

来源:3-5 使用多线程实现多客户端的通信

小猪洋

2014-12-22 14:32

我是搞移动端的,对java了解比较少,但是现在有个项目涉及到聊天功能,刚刚看了这节socket,收获不少,但是仍然不会实现聊天功能的服务器端的功能。求大家帮助。能发份代码或者怎么的么?谢谢了 邮箱:(380916624@qq.com)

写回答 关注

5回答

  • qq_杞人_0
    2016-12-07 20:30:44

    好厉害


  • 沐水轻歌
    2015-05-09 00:22:41

    可以尝试使用集合操作,之前我做过这东西,就是没写图形界面

  • 小鹏子
    2015-04-11 13:43:19

    这个好像只能在服务端跟客服端之间通信,不能在客户端跟客户端通信

    SoyaDo...

    两个问题:1、所谓服务端、客户端不过是个用以评判工作性质的称谓罢了;2、所谓的客户端互通,其实是服务端在中间转发,而客户端为了保持独立性,客户端之间一般不做链接。

    2016-08-19 20:43:45

    共 1 条回复 >

  • 小猪洋
    2014-12-23 15:11:50

    好的,多谢了~我把代码扒下来跑看看。

  • 慕后端6538015
    2014-12-23 12:46:37

    老师上课用的代码,你看看吧,不知道有没有用



    //////////////////////////////////////服务器程序

    import java.awt.*;

    import javax.swing.*;

    import java.awt.event.*;

    import java.io.*;

    import java.net.*;


    public class MyServer extends JFrame implements ActionListener {

    JTextArea jta;

    JTextField jtf;

    JButton jb;

    JPanel jp;

    ServerSocket ss;

    Socket socket;

    DataOutputStream out;

    DataInputStream in;


    public MyServer() {

    jta = new JTextArea();

    jtf = new JTextField(15);

    jb = new JButton("发送");

    jp = new JPanel();


    jp.add(jtf);

    jp.add(jb);


    JScrollPane jsp = new JScrollPane(jta);

    this.add(jsp, BorderLayout.CENTER);

    this.add(jp, BorderLayout.SOUTH);


    jb.addActionListener(this);

    jtf.addActionListener(this);


    // 展现

    this.setTitle("服务器");

    this.setSize(300, 200);

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    this.setVisible(true);


    // 开放端口

    try {

    ss = new ServerSocket(9000);

    System.out.println("等待连接");

    socket = ss.accept();

    System.out.println("已连接");


    out = new DataOutputStream(socket.getOutputStream());

    in = new DataInputStream(socket.getInputStream());

    while (true) {

    // 接受客户端发送数据

    String str = in.readUTF();

    // 显示多行文本框中

    jta.append("客户端说:" + str + "\r\n");

    }

    } catch (IOException e) {

    e.printStackTrace();

    }

    }


    public static void main(String[] args) {

    new MyServer();

    }


    public void actionPerformed(ActionEvent e) {

    if (e.getSource() == jb || e.getSource() == jtf) {

    // 向客户端发送数据

    try {

    out.writeUTF(jtf.getText());

    } catch (IOException e1) {

    e1.printStackTrace();

    }

    // 向多行文本框输入历史聊天记录信息

    jta.append("服务器说:" + jtf.getText() + "\r\n");

    // 清空单行文本框内容

    jtf.setText("");


    }

    }


    ///////////////////////////////////////////////////客户端程序


    import java.awt.*;

    import java.awt.event.*;

    import java.io.*;

    import java.net.*;

    import javax.swing.*;


    //客户端程序

    public class MyClient extends JFrame implements ActionListener {

    JButton jb;

    JTextArea jta;

    JTextField jtf;

    JPanel jp;

    Socket socket;

    DataOutputStream out;

    DataInputStream in;


    public MyClient() {

    jta = new JTextArea();

    jtf = new JTextField(15);

    jb = new JButton("发送");

    jp = new JPanel();


    jp.add(jtf);

    jp.add(jb);


    JScrollPane jsp = new JScrollPane(jta);

    this.add(jsp, BorderLayout.CENTER);

    this.add(jp, BorderLayout.SOUTH);


    jb.addActionListener(this);

    jtf.addActionListener(this);


    // 展现

    this.setTitle("客户端");

    this.setSize(300, 200);

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    this.setVisible(true);


    try {

    // 建立连接

    socket = new Socket("127.0.0.1", 9000);

    out = new DataOutputStream(socket.getOutputStream());

    in = new DataInputStream(socket.getInputStream());


    while (true) {

    // 接受服务器发送数据

    String str = in.readUTF();

    // 显示在多行文本框

    jta.append("服务器说:" + str + "\r\n");

    }


    } catch (UnknownHostException e) {

    e.printStackTrace();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }


    public static void main(String[] args) {

    new MyClient();

    }


    public void actionPerformed(ActionEvent e) {

    if (e.getSource() == jb || e.getSource() == jtf) {

    // 向服务器发送数据

    try {

    out.writeUTF(jtf.getText());

    } catch (IOException e1) {

    e1.printStackTrace();

    }


    // 显示在多行文本框

    jta.append("客户端说:" + jtf.getText() + "\r\n");

    // 清空单行文本框

    jtf.setText("");

    }

    }

    }


    小猪洋

    好的,多谢了~我把代码扒下来跑看看。

    2014-12-23 15:12:33

    共 2 条回复 >

Java Socket应用---通信是这样练成的

分享的是 Java 中的网络编程,使用Socket实现网络聊天通信

125012 学习 · 590 问题

查看课程

相似问题