javaQQ聊天室
服器务务:
package ChatRoomTCPQQ聊天室;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashSet;
public class ChatRoomServer {
private ServerSocket ss;
private HashSet allSockets;
public ChatRoomServer(){
try {
ss=new ServerSocket(8888);
allSockets=new HashSet();
} catch (IOException e) {
e.printStackTrace();
}
}
public void startService() throws IOException{
while(true){
Socket s=ss.accept();
allSockets.add(s);
new ServerThread(s).start();
}
}
public class ServerThread extends Thread{
private Socket s;
public ServerThread(Socket s){
this.s=s;
}
public void run(){
BufferedReader br=null;
PrintWriter pw=null;
try {
while(true){
br=new BufferedReader(new InputStreamReader(s.getInputStream()));
String str=br.readLine();
for(Socket sk:allSockets){
pw = new PrintWriter(sk.getOutputStream());
pw.println(str);
pw.flush();
}
}
} catch (IOException e) {
e.printStackTrace();
}finally{
if(s!=null)try{s.close();}catch(IOException e){};
}
}
}
public static void main(String[] args){
try {
new ChatRoomServer().startService();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
客端务务
package ChatRoomTCPQQ聊天室;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;import javax.swing.JOptionPane;public class ChatRoomClent {
private Socket s;
public ChatRoomClent(String host,int port){
try {
s=new Socket(host,port);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void sendMessage(String str){
PrintWriter pw=null;
try {
pw=new PrintWriter(s.getOutputStream());
pw.println(str);
pw.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
public String reciveMessage(){
BufferedReader br=null;
String str="";
try {
br=new BufferedReader(new InputStreamReader(s.getInputStream()));
str = br.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
}
客界面务务务
package ChatRoomTCPQQ聊天室;
import java.awt.BorderLayout;import java.awt.FlowLayout;
import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;import javax.swing.JPanel;
import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;public class ClentFrame extends JFrame {
private JTextArea area;
private JLabel label;
private JTextField field;
private JButton button;
private JScrollPane jsp;
private JPanel jp,jp2;
private ChatRoomClent client;
public ClentFrame(){
super("聊天室程序");
area=new JTextArea(12,67);
area.setEditable(false);
label=new JLabel("");
field=new JTextField(50);
button=new JButton("务送");
jsp=new JScrollPane(area);
jp=new JPanel();
jp2=new JPanel();
client=new ChatRoomClent("127.0.0.1",8888);
init();
addEventHander();
}
public void init(){
jp.setLayout(new FlowLayout());
jp.add(label);
jp.add(field);
jp.add(button);
jp2.add(jsp,BorderLayout.CENTER);
//area.setEditable(false);
add(jp2,BorderLayout.CENTER);
add(jp,BorderLayout.SOUTH);
String str=JOptionPane.showInputDialog(this, "务务务务务务入登用:","务入提示");
if(str==null||str.equals("务入提示")||str.equals("")){
str="匿名用务";
}
label.setText(str);
}
public void addEventHander(){
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
System.out.println(field.getText());
if (field.getText()!=null&&!field.getText().equals("")){
client.sendMessage(label.getText()+"务:"+field.getText());
field.setText("");
}else{
//JOptionPane.showMessageDialog(this,"源文件,目务
路径和算法因子不合法:");
}
}
});
}
public void showMe(){
setSize(750, 300);
setLocation(420,280);
setResizable(false);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
private class ReadMessageThread extends Thread{
public void run(){
while(true){
String str=client.reciveMessage();
area.append(str+"\n");
}
}
}
public static void main(String[] args){
ClentFrame cf= new ClentFrame();
Thread t=cf.new ReadMessageThread();
cf.showMe();
t.start();
}
}