package com.chat;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.IOException;
import java.net.*;
import java.io.*;
public class ChatClient extends JFrame implements ActionListener{
private JTextField txf;
private JTextArea ta;
private Socket ss= null;
private DataOutputStream dos= null; //输出流
private DataInputStream dis= null;
private boolean connected= false;
public static void main(String args[])
{
new ChatClient();
}
public ChatClient() {
super();
setBounds(100, 100, 412, 328);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
txf = new JTextField();
getContentPane().add(txf, BorderLayout.SOUTH);
txf.addActionListener( this);
ta = new JTextArea();
ta.setColumns(10);
ta.setEditable( false);
ta.setForeground(Color.RED);
getContentPane().add(ta, BorderLayout.CENTER);
this.connectServer();
Thread t= new Thread( new ReceiveThread());
t.start();
this.setVisible( true); //窗口可见
/*this.addWindowListener(new WindowAdapter(){
public void WindowClosing(WindowEvent e)
{
System.exit(0);
disconnect();
}
});*/
}
public void connectServer()
{
try {
ss= new Socket( "127.0.0.1",2222);
dos= new DataOutputStream(ss.getOutputStream());
dis= new DataInputStream(ss.getInputStream());
connected= true;
} catch (UnknownHostException e) {
System.out.println( "没有找到主机!");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void sendMessage(String sendStr) throws IOException
{
dos.writeUTF(sendStr);
dos.flush();
}
private void disconnect()
{
try {
dos.close();
System.out.println( "输出流已经关闭!");
} catch (IOException e) {
e.printStackTrace();
}
try {
ss.close();
System.out.println( "Socket已经关闭!");
} catch (IOException e) {
e.printStackTrace();
}
}
class ReceiveThread implements Runnable
{
public void run()
{
try{
while(connected)
{
String str = dis.readUTF();
System.out.println(str);
ta.setText(str);
}
} catch(IOException e){
e.printStackTrace();
}
}
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource().equals(txf)&&!txf.getText().trim().equals(""))
{
String str=txf.getText();
//ta.setText(str);
if(!ta.getText().trim().equals(""))
ta.append( "\n");
if(txf.getText().trim().equals( "cls"))
{
ta.setText("");
txf.setText("");
return;
}
//发送消息
try {
this.sendMessage(str);
} catch (IOException e1) {
e1.printStackTrace();
}
ta.append(str);
txf.setText("");
}
}
}
package com.chat;
import java.util.List;
import java.io.IOException;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.io.*;
public class ChatServer
{
List<Client> clientList= new ArrayList<Client>();
public static void main(String args[])
{
new ChatServer().start();
}
class Client implements Runnable
{
//成员变量
private DataInputStream dis= null;
private DataOutputStream dos= null;
private boolean connected= false;
private Socket s= null;
//构造函数
Client(Socket s)
{
this.s=s;
}
//向指定用户发送消息
public void sendMessage(String str)
{
for( int i=0;i<clientList.size();i++)
{
try {
dos.writeUTF(str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
//run方法
public void run()
{
connected= true;
try {
dis = new DataInputStream(s.getInputStream()); //得到输入流
dos = new DataOutputStream(s.getOutputStream()); //得到输出流
while(connected)
{
String str=dis.readUTF();
System.out.println(str);
for( int i = 0;i<clientList.size(); i++ )
{
clientList.get(i).sendMessage(str); //把消息发个客户端
}
}
} catch (IOException e) {
e.printStackTrace();
}
finally
{
try{
if(s!= null)
s.close();
if(dis!= null)
dis.close();
if(dos!= null)
dos.close();
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
}
}
public void start()
{
boolean started = false;
ServerSocket ss= null;
try {
ss = new ServerSocket(2222); //开启服务器
started= true; //若开启成功则started=true;
System.out.println( "服务器已开启!");
}
catch(BindException e){
System.out.println( "端口使用中");
}
catch (IOException e2) {
e2.printStackTrace();
}
while(started) //判断服务器是否开启
{
boolean connected = false; //判断客户端
Socket s;
try {
s = ss.accept(); //接受一个socket
Client c= new Client(s); //构造一个客户端
this.clientList.add(c); //加入列表
Thread t= new Thread(c);
t.start();
System.out.println( "一个客户端已经连接..."); //提示
} catch (IOException e)
{
e.printStackTrace();
}
}
}
}
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.IOException;
import java.net.*;
import java.io.*;
public class ChatClient extends JFrame implements ActionListener{
private JTextField txf;
private JTextArea ta;
private Socket ss= null;
private DataOutputStream dos= null; //输出流
private DataInputStream dis= null;
private boolean connected= false;
public static void main(String args[])
{
new ChatClient();
}
public ChatClient() {
super();
setBounds(100, 100, 412, 328);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
txf = new JTextField();
getContentPane().add(txf, BorderLayout.SOUTH);
txf.addActionListener( this);
ta = new JTextArea();
ta.setColumns(10);
ta.setEditable( false);
ta.setForeground(Color.RED);
getContentPane().add(ta, BorderLayout.CENTER);
this.connectServer();
Thread t= new Thread( new ReceiveThread());
t.start();
this.setVisible( true); //窗口可见
/*this.addWindowListener(new WindowAdapter(){
public void WindowClosing(WindowEvent e)
{
System.exit(0);
disconnect();
}
});*/
}
public void connectServer()
{
try {
ss= new Socket( "127.0.0.1",2222);
dos= new DataOutputStream(ss.getOutputStream());
dis= new DataInputStream(ss.getInputStream());
connected= true;
} catch (UnknownHostException e) {
System.out.println( "没有找到主机!");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void sendMessage(String sendStr) throws IOException
{
dos.writeUTF(sendStr);
dos.flush();
}
private void disconnect()
{
try {
dos.close();
System.out.println( "输出流已经关闭!");
} catch (IOException e) {
e.printStackTrace();
}
try {
ss.close();
System.out.println( "Socket已经关闭!");
} catch (IOException e) {
e.printStackTrace();
}
}
class ReceiveThread implements Runnable
{
public void run()
{
try{
while(connected)
{
String str = dis.readUTF();
System.out.println(str);
ta.setText(str);
}
} catch(IOException e){
e.printStackTrace();
}
}
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource().equals(txf)&&!txf.getText().trim().equals(""))
{
String str=txf.getText();
//ta.setText(str);
if(!ta.getText().trim().equals(""))
ta.append( "\n");
if(txf.getText().trim().equals( "cls"))
{
ta.setText("");
txf.setText("");
return;
}
//发送消息
try {
this.sendMessage(str);
} catch (IOException e1) {
e1.printStackTrace();
}
ta.append(str);
txf.setText("");
}
}
}
package com.chat;
import java.util.List;
import java.io.IOException;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.io.*;
public class ChatServer
{
List<Client> clientList= new ArrayList<Client>();
public static void main(String args[])
{
new ChatServer().start();
}
class Client implements Runnable
{
//成员变量
private DataInputStream dis= null;
private DataOutputStream dos= null;
private boolean connected= false;
private Socket s= null;
//构造函数
Client(Socket s)
{
this.s=s;
}
//向指定用户发送消息
public void sendMessage(String str)
{
for( int i=0;i<clientList.size();i++)
{
try {
dos.writeUTF(str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
//run方法
public void run()
{
connected= true;
try {
dis = new DataInputStream(s.getInputStream()); //得到输入流
dos = new DataOutputStream(s.getOutputStream()); //得到输出流
while(connected)
{
String str=dis.readUTF();
System.out.println(str);
for( int i = 0;i<clientList.size(); i++ )
{
clientList.get(i).sendMessage(str); //把消息发个客户端
}
}
} catch (IOException e) {
e.printStackTrace();
}
finally
{
try{
if(s!= null)
s.close();
if(dis!= null)
dis.close();
if(dos!= null)
dos.close();
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
}
}
public void start()
{
boolean started = false;
ServerSocket ss= null;
try {
ss = new ServerSocket(2222); //开启服务器
started= true; //若开启成功则started=true;
System.out.println( "服务器已开启!");
}
catch(BindException e){
System.out.println( "端口使用中");
}
catch (IOException e2) {
e2.printStackTrace();
}
while(started) //判断服务器是否开启
{
boolean connected = false; //判断客户端
Socket s;
try {
s = ss.accept(); //接受一个socket
Client c= new Client(s); //构造一个客户端
this.clientList.add(c); //加入列表
Thread t= new Thread(c);
t.start();
System.out.println( "一个客户端已经连接..."); //提示
} catch (IOException e)
{
e.printStackTrace();
}
}
}
}
转载于:https://blog.51cto.com/jornathan/528328