为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

正在回答

6 回答

好厉害


0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

1 回复 有任何疑惑可以回复我~
#1

SoyaDokio

两个问题:1、所谓服务端、客户端不过是个用以评判工作性质的称谓罢了;2、所谓的客户端互通,其实是服务端在中间转发,而客户端为了保持独立性,客户端之间一般不做链接。
2016-08-19 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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



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

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("");

}

}

}


1 回复 有任何疑惑可以回复我~
#1

小猪洋 提问者

好的,多谢了~我把代码扒下来跑看看。
2014-12-23 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信