我想實(shí)現(xiàn)類似QQ聊天的服務(wù)器端功能,怎么做呢?
我是搞移動(dòng)端的,對(duì)java了解比較少,但是現(xiàn)在有個(gè)項(xiàng)目涉及到聊天功能,剛剛看了這節(jié)socket,收獲不少,但是仍然不會(huì)實(shí)現(xiàn)聊天功能的服務(wù)器端的功能。求大家?guī)椭D馨l(fā)份代碼或者怎么的么?謝謝了 郵箱:(380916624@qq.com)
我是搞移動(dòng)端的,對(duì)java了解比較少,但是現(xiàn)在有個(gè)項(xiàng)目涉及到聊天功能,剛剛看了這節(jié)socket,收獲不少,但是仍然不會(huì)實(shí)現(xiàn)聊天功能的服務(wù)器端的功能。求大家?guī)椭D馨l(fā)份代碼或者怎么的么?謝謝了 郵箱:(380916624@qq.com)
2014-12-22
舉報(bào)
2016-12-07
好厲害
2015-05-09
可以嘗試使用集合操作,之前我做過(guò)這東西,就是沒(méi)寫圖形界面
2015-04-11
這個(gè)好像只能在服務(wù)端跟客服端之間通信,不能在客戶端跟客戶端通信
2014-12-23
好的,多謝了~我把代碼扒下來(lái)跑看看。
2014-12-23
老師上課用的代碼,你看看吧,不知道有沒(méi)有用
//////////////////////////////////////服務(wù)器程序
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("發(fā)送");
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);
// 展現(xiàn)
this.setTitle("服務(wù)器");
this.setSize(300, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
// 開(kāi)放端口
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) {
// 接受客戶端發(fā)送數(shù)據(jù)
String str = in.readUTF();
// 顯示多行文本框中
jta.append("客戶端說(shuō):" + 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) {
// 向客戶端發(fā)送數(shù)據(jù)
try {
out.writeUTF(jtf.getText());
} catch (IOException e1) {
e1.printStackTrace();
}
// 向多行文本框輸入歷史聊天記錄信息
jta.append("服務(wù)器說(shuō):" + jtf.getText() + "\r\n");
// 清空單行文本框內(nèi)容
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("發(fā)送");
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);
// 展現(xiàn)
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) {
// 接受服務(wù)器發(fā)送數(shù)據(jù)
String str = in.readUTF();
// 顯示在多行文本框
jta.append("服務(wù)器說(shuō):" + 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) {
// 向服務(wù)器發(fā)送數(shù)據(jù)
try {
out.writeUTF(jtf.getText());
} catch (IOException e1) {
e1.printStackTrace();
}
// 顯示在多行文本框
jta.append("客戶端說(shuō):" + jtf.getText() + "\r\n");
// 清空單行文本框
jtf.setText("");
}
}
}