客戶端程序/*
* Created on 2004/11/25
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package fts.chat;import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;/**
* @author zhl-wang
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class chatPanl extends JFrame implements ActionListener ,Runnable{JTextArea m_textarea;
JTextField m_textfield;
JButton ok;
JButton no;
Container c;
DataInputStream m_in;
DataOutputStream m_out;public chatPanl(){
super("聊天程序");m_in = null;
m_out = null;
c = getContentPane();
setSize(426,266);
m_textarea = new JTextArea(10,100);
m_textfield = new JTextField("",100);
ok = new JButton("send");
no = new JButton("cancel");try{
Socket m_socket;
m_socket = new Socket("192.168.151.72",5555);
m_in = new DataInputStream(m_socket.getInputStream());
m_out = new DataOutputStream(m_socket.getOutputStream());
}
catch (Exception e){
System.out.println("Error:"+e);
}new Thread(this).start();
c.setLayout(new BorderLayout());
c.add(m_textarea,BorderLayout.SOUTH);
c.add(m_textfield,BorderLayout.CENTER);
c.add(ok,BorderLayout.EAST);
c.add(no,BorderLayout.WEST);
ok.addActionListener(this);
no.addActionListener(this);
m_textarea.setEditable(false);
show();
}public static void main(String[] args) {
chatPanl app = new chatPanl();
app.addWindowListener(new MyWindowListener());
}/* (non-Javadoc)
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
public void actionPerformed(ActionEvent e) {
if (e.getSource()==ok){
String v = m_textfield.getText();
m_textfield.setText("");
try {
m_out.writeUTF(v);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
else if(e.getSource()==no){
m_textfield.setText("");
}
}/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
public void run() {
try{
while (true){
String s = m_in.readUTF();
if (s!=null){
m_textarea.append(s+"\n");
}
}
}
catch (Exception e){
m_textarea.append("Bye welcome next enter the chat");
m_textfield.setVisible(false);
}
}public void stop(){
try{
m_out.writeUTF("leave");
}
catch (IOException e){}
}
}
* Created on 2004/11/25
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package fts.chat;import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;/**
* @author zhl-wang
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class chatPanl extends JFrame implements ActionListener ,Runnable{JTextArea m_textarea;
JTextField m_textfield;
JButton ok;
JButton no;
Container c;
DataInputStream m_in;
DataOutputStream m_out;public chatPanl(){
super("聊天程序");m_in = null;
m_out = null;
c = getContentPane();
setSize(426,266);
m_textarea = new JTextArea(10,100);
m_textfield = new JTextField("",100);
ok = new JButton("send");
no = new JButton("cancel");try{
Socket m_socket;
m_socket = new Socket("192.168.151.72",5555);
m_in = new DataInputStream(m_socket.getInputStream());
m_out = new DataOutputStream(m_socket.getOutputStream());
}
catch (Exception e){
System.out.println("Error:"+e);
}new Thread(this).start();
c.setLayout(new BorderLayout());
c.add(m_textarea,BorderLayout.SOUTH);
c.add(m_textfield,BorderLayout.CENTER);
c.add(ok,BorderLayout.EAST);
c.add(no,BorderLayout.WEST);
ok.addActionListener(this);
no.addActionListener(this);
m_textarea.setEditable(false);
show();
}public static void main(String[] args) {
chatPanl app = new chatPanl();
app.addWindowListener(new MyWindowListener());
}/* (non-Javadoc)
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
public void actionPerformed(ActionEvent e) {
if (e.getSource()==ok){
String v = m_textfield.getText();
m_textfield.setText("");
try {
m_out.writeUTF(v);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
else if(e.getSource()==no){
m_textfield.setText("");
}
}/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
public void run() {
try{
while (true){
String s = m_in.readUTF();
if (s!=null){
m_textarea.append(s+"\n");
}
}
}
catch (Exception e){
m_textarea.append("Bye welcome next enter the chat");
m_textfield.setVisible(false);
}
}public void stop(){
try{
m_out.writeUTF("leave");
}
catch (IOException e){}
}
}
/*
* Created on 2004/11/24
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package fts.chat;import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;/**
* @author zhl-wang
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class chatserver {
public static void main(String args[]){
ServerSocket socket = null;
Vector m_threads = new Vector();
System.out.println("Listen...");try{
socket = new ServerSocket(5555);
}
catch (Exception e){
System.out.println("new ServerSocket() failed!");
return;
}
try{
int nid = 0;
while(true){
Socket s = socket.accept();
System.out.println("accepted");
ServerThread st = new ServerThread(s,m_threads);
st.setID(nid++);
m_threads.addElement(st);
new Thread(st).start();
for (int i=0;i<m_threads.size();i++){
ServerThread st1 = (ServerThread)m_threads.elementAt(i);
st1.write("<#>welcome "+"to enter chatroom");
}
System.out.println("Listen again...");
}
}
catch (Exception e){
System.out.println("Server is down");
}
}
}
thread/*
* Created on 2004/11/24
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package fts.chat;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Vector;/**
* @author zhl-wang
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class ServerThread implements Runnable {
Vector m_threads;
Socket m_socket = null;
DataInputStream m_in = null;
DataOutputStream m_out = null;
int m_nid;public ServerThread(Socket s, Vector threads){
m_socket = s;
m_threads = threads;
try{
m_in = new DataInputStream(m_socket.getInputStream());
m_out = new DataOutputStream(m_socket.getOutputStream());
}
catch (Exception e){}
}/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
public void run() {
System.out.println("thread is running");
boolean flag = true;
try{
while (flag){
String s = m_in.readUTF();
if (s==null) break;
if (s.intern().equals("leave")){
for (int i=0;i<m_threads.size();i++){
ServerThread st = (ServerThread)m_threads.elementAt(i);
st.write("***"+getID()+"leave..."+"***");
flag = false;
}
}
else{
for (int i=0;i<m_threads.size();i++){
ServerThread st = (ServerThread)m_threads.elementAt(i);
st.write("<"+getID()+">"+s);
}
}
}
}
catch (Exception e){}
m_threads.removeElement(this);
try{
m_socket.close();
}
catch (Exception e){
System.out.println("Connect is dowm");
}
}public void write(String msg){
synchronized(m_out){
try{
m_out.writeUTF(msg);
}
catch (IOException e){}
}
}public int getID(){
return m_nid;
}public void setID(int nid){
m_nid = nid;
}
}
就这样,不用其他软件!
你好,这是我做的