完整代码私聊我要。。。
服务端:
客户端:
package liaotian;
import java.awt.BorderLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.TitledBorder;
public class Client extends JFrame implements ActionListener{
public Client() throws UnknownHostException, IOException{ //构造方法
super(); //调用父类的构造方法设置标题
init(); //调用init
setVisible(true);
}
Socket socket1;
DefaultListModel<String> dl = new DefaultListModel<String>();//用来修改JList
JList jl = new JList(dl);
JLabel label=new JLabel("连接到127.0.0.1:9999端口!");
JButton button1=new JButton("发送");
JButton button2=new JButton("清空");
JTextArea text1=new JTextArea(10,4);
JTextArea text2=new JTextArea(2,1);
JPanel jp1=new JPanel();
JScrollPane jp2=new JScrollPane();
JPanel jp3=new JPanel();
JPanel jp4=new JPanel();
JScrollPane jp5=new JScrollPane(text2);
JScrollPane jp6=new JScrollPane(text1);
private void init() throws UnknownHostException, IOException {
String username=JOptionPane.showInputDialog("请输入您的用户名");
setTitle(username+"聊天室");
setSize(500,400);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
jp6.setBorder(BorderFactory.createTitledBorder("聊天记录"));
text1.setEditable(false);
jp1.setLayout(new BorderLayout());
label.setHorizontalAlignment(JLabel.RIGHT);
jp1.add(label,BorderLayout.NORTH);
jp1.add(jp6,BorderLayout.CENTER);
jl.setFixedCellWidth(100);
jl.setFixedCellHeight(35);
jl.setBorder(new TitledBorder("好友列表"));
jp2.setViewportView(jl);
jp5.setBorder(BorderFactory.createTitledBorder("请输入文字"));
jp3.setLayout(new BorderLayout());
jp4.add(button1);
jp4.add(button2);
jp3.add(jp5,BorderLayout.NORTH);
jp3.add(jp4,BorderLayout.SOUTH);
//整个布局
add(jp1,BorderLayout.CENTER);
add(jp2,BorderLayout.WEST);
add(jp3,BorderLayout.SOUTH);
button1.addActionListener(this);
button2.addActionListener(this);
Socket socket =new Socket("127.0.0.1",8080);
socket1=socket;
PrintStream ps=new PrintStream(socket.getOutputStream());
ps.println("login"+username+"login");
ps.flush();
new thread(socket).start();
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
ps.println("exit");
ps.flush();
}
});
}
public void actionPerformed(ActionEvent e) {
String button = e.getActionCommand();
if(button=="清空") {
text2.setText("");
}
if(button=="发送") {
String mess=text2.getText();
try {
sendmess(socket1,mess);
text2.setText("");
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
public static void main(String[] args) throws UnknownHostException, IOException{
new Client();
}
class thread extends Thread{
Socket socket;
public thread(Socket socket) {
this.socket=socket;
}
public void run() {
while(true) {
try {
BufferedReader br = null;
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg;
msg = br.readLine();//读取服务器是否发送了消息给该客户端
if(msg.startsWith("login")&&msg.endsWith("login")) {
String[] strs = msg.replace("login", "").split("#");
dl.clear();
for(String str:strs) {
dl.addElement(str);
}
}
else {
text1.append(msg+"\n");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private void sendmess(Socket socket,String mess) throws IOException {
PrintStream ps=new PrintStream(socket.getOutputStream());
ps.println(mess);
ps.flush();
}
}
大致就是这样。。。。