📄 javachat.txt
字号:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.util.*;
class Message implements Serializable {
public volatile String senderID;
public volatile String msgText;
}
class client extends JFrame implements ActionListener,Runnable
{
Socket socket = null;
JLabel l1,l2,l3,l4,l5,l6,jtf3;
JTextField jtf1,jtf2,jtf4,jtf5;
TextArea ta;
Message msg = new Message();
InetAddress host;
int port = 5000;
Thread t = null;
JButton jb,jb2,jb3;
client(String s)
{
super(s);
myadapter a = new myadapter(this);
addWindowListener(a);
l5 = new JLabel("Enter IP : ");
add(l5);
jtf4 = new JTextField(15);
add(jtf4);
jtf4.setText("127.0.0.1");
add(new JLabel(" "));
l6 = new JLabel("Enter Port : ");
add(l6);
jtf5 = new JTextField(15);
add(jtf5);
jtf5.setText("5000");
l1 = new JLabel("Nick Name : ");
add(l1);
jtf1 = new JTextField(15);
add(jtf1);
jb2 = new JButton("Connect");
add(jb2);
jb2.addActionListener(this);
jb3 = new JButton("Disconnect");
add(jb3);
jb3.addActionListener(this);
jb3.setEnabled(false);
add(new JLabel(" "));
l2 = new JLabel("Message : ");
add(l2);
jtf2 = new JTextField(34);
add(jtf2);
jtf2.setEditable(false);
jb = new JButton("Send Message");
add(jb);
jb.addActionListener(this);
jb.setEnabled(false);
l3 = new JLabel("Status : ");
add(l3);
jtf3 = new JLabel("Not connected to the server...");
add(jtf3);
add(new JLabel(" "));
l4 = new JLabel("Recieved Messages : ");
add(l4);
ta = new TextArea("",15,80);
add(ta);
ta.setFont(Font.getFont("verdana"));
ta.setBackground(Color.ORANGE);
ta.setEditable(false);
jtf3.setText("Not connected to Server, click connect");
}
public void actionPerformed(ActionEvent ae)
{
try{
String str = ae.getActionCommand();
if(str.equals("Disconnect"))
{
try
{
jb.setEnabled(false);
jtf2.setEditable(false);
jb2.setEnabled(true);
jb3.setEnabled(false);
jtf4.setEditable(true);
jtf5.setEditable(true);
jtf1.setEditable(true);
socket.close();
socket = null;
}
catch(Exception e)
{}
}
if(str.equals("Send Message"))
{
msg.senderID = jtf1.getText();
msg.msgText = jtf2.getText();
jtf2.setText("");
if(!msg.senderID.equals("") && !msg.msgText.equals(""))
{
sendData();
}
else
jtf3.setText("Message was not sent, type a message");
}
if(str.equals("Connect"))
{
try{
host = InetAddress.getByName(jtf4.getText());
String p = jtf5.getText();
try{
if(socket!=null)
{
socket.close();
socket = null;
}
}
catch(Exception e)
{}
if(!jtf1.getText().equals(""))
{
socket = new Socket(host,Integer.parseInt(p));
ObjectOutputStream obj = new ObjectOutputStream(socket.getOutputStream());
msg.senderID = jtf1.getText();
msg.msgText = " is now online at "+new Date().toString();
obj.writeObject(msg);
jtf2.setEditable(true);
jb.setEnabled(true);
jb2.setEnabled(false);
jb3.setEnabled(true);
jtf4.setEditable(false);
jtf5.setEditable(false);
jtf1.setEditable(false);
jtf3.setText("Connection established with Server, start chatting");
t = new Thread(this,"Reading");
t.start();
}
}
catch(Exception e)
{
jtf3.setText("Could not connect to Server, connect again");
}
}
}
catch(Exception e)
{
jtf3.setText("Action Error");
}
}
public void sendData()
{
try
{
ObjectOutputStream obj = new ObjectOutputStream(socket.getOutputStream());
if(!msg.senderID.equals("") && !msg.msgText.equals(""))
{
obj.writeObject(msg);
jtf3.setText("Message was sent successfully");
}
msg.senderID = "";
msg.msgText = "";
}
catch(Exception e)
{
jtf3.setText("Error occured while sending message");
}
}
public void run()
{
try
{
while(true)
{
ObjectInputStream obj = new ObjectInputStream(socket.getInputStream());
Message msg = new Message();
msg = (Message) obj.readObject();
if(msg.senderID!=null && msg.msgText!=null)
ta.append(msg.senderID+" >> "+msg.msgText+"\n");
}
}
catch(Exception e)
{
jtf2.setEditable(false);
jb2.setEnabled(true);
jb.setEnabled(false);
jb3.setEnabled(false);
jtf4.setEditable(true);
jtf5.setEditable(true);
jtf1.setEditable(true);
jtf3.setText("Connection Lost");
}
}
}
class demo
{
public static void main(String a[])
{
client f = new client("Messenger by Kashif Khan");
f.setLayout(new FlowLayout());
f.setSize(600,425);
f.setResizable(false);
f.setVisible(true);
}
}
class myadapter extends WindowAdapter
{
client f;
public myadapter(client j)
{
f = j;
}
public void windowClosing(WindowEvent we)
{
f.setVisible(false);
try{
f.socket.close();
f.dispose();
}
catch(Exception e)
{
}
System.exit(0);
}
}
import java.net.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
class Message implements Serializable {
public volatile String senderID;
public volatile String msgText;
}
class data
{
public volatile int signal;
public volatile int count;
}
class ser extends JFrame implements ActionListener,Runnable
{
Thread t;
JButton a,b;
JTextField jtf2;
JLabel jtf;
TextArea ta;
ServerSocket server;
Message msg = new Message();
data flag = new data();
Socket count[] = new Socket[5];
int cj = 5;
int cl = 0;
ser(String s)
{
super(s);
flag.signal = 0;
flag.count = 0;
JLabel l3 = new JLabel("Enter Port No. : ");
add(l3);
jtf2 = new JTextField(7);
jtf2.setText("5000");
add(jtf2);
JLabel l1 = new JLabel("Start the Server");
add(l1);
a = new JButton("Start");
a.addActionListener(this);
add(a);
JLabel l2 = new JLabel("Stop the Server");
add(l2);
b = new JButton("Stop");
b.addActionListener(this);
add(b);
b.setEnabled(false);
JLabel l4 = new JLabel("Status : ");
add(l4);
add(new JLabel(" "));
jtf = new JLabel("Server is not running...");
add(jtf);
ta = new TextArea("",15,70);
ta.setEditable(false);
ta.setBackground(Color.WHITE);
ta.setFont(Font.getFont("verdana"));
add(ta);
mywindowadapter a = new mywindowadapter(this);
addWindowListener(a);
}
public void actionPerformed(ActionEvent ae)
{
try{
String str = ae.getActionCommand();
if(str.equals("Start"))
{
String str2 = jtf2.getText();
if(!str2.equals(""))
{
try
{
server = new ServerSocket(Integer.parseInt(str2));
jtf.setText("Server is running....");
jtf2.setEnabled(false);
a.setEnabled(false);
b.setEnabled(true);
flag.count = 0;
count = new Socket[5];
cj = 5;
cl = 0;
t = new Thread(this,"Running");
t.start();
}
catch(Exception e)
{
jtf.setText("Either the port no. is invalid or is in use");
}
}
else
jtf.setText("Enter port no.");
}
if(str.equals("Stop"))
{
try{
server.close();
}
catch(Exception ee)
{
jtf.setText("Error closing server");
}
jtf.setText("Server is closed");
jtf2.setEnabled(true);
a.setEnabled(true);
b.setEnabled(false);
server = null;
t = null;
for(int i=0;i<flag.count;i++)
{
try{
count[i].close();
}
catch(Exception e)
{
}
}
}
}
catch(Exception ex)
{
}
}
public void run()
{
while(true)
{
if(server.isClosed())
return;
try{
Socket client = server.accept();
ObjectInputStream obj = new ObjectInputStream(client.getInputStream());
msg = (Message) obj.readObject();
ta.append(msg.senderID+" >> "+msg.msgText+"\n");
if(cl<cj)
{
count[cl] = client;
cl++;
}
else
{
Socket temp[] = new Socket[cj];
for(int i=0;i<cj;i++)
{
temp[i] = count[i];
}
count = new Socket[cj+5];
for(int i=0;i<cj;i++)
{
count[i] = temp[i];
}
count[cj] = client;
cj = cj+5;
cl++;
}
flag.count = cl;
for(int i=0;i<flag.count;i++)
{
try{
ObjectOutputStream objw = new ObjectOutputStream(count[i].getOutputStream());
objw.writeObject(msg);
}catch(Exception e)
{}
}
new newthread(client,msg,flag,count,this,server);
}
catch(Exception e)
{
jtf.setText("Server is stopped");
jtf2.setEnabled(true);
try{
server.close();
}
catch(Exception ey)
{
jtf.setText("Error closing server");
}
}
}
}
}
class server
{
public static void main(String a[])throws IOException
{
ser f = new ser("Chat Server by Kashif Khan");
f.setLayout(new FlowLayout());
f.setSize(550,365);
f.setResizable(false);
f.setVisible(true);
}
}
class newthread implements Runnable
{
Thread t;
Socket client;
Message msg;
data flag;
Socket count[];
ser f;
ServerSocket server;
newthread(Socket client,Message msg,data flag,Socket count[],ser f,ServerSocket server)
{
t = new Thread(this,"Client");
this.server = server;
this.client = client;
this.msg = msg;
this.f = f;
this.flag = flag;
this.count = count;
t.start();
}
public void run()
{
String name = msg.senderID;
try
{
while(server.isClosed()!=true)
{
ObjectInputStream obj = new ObjectInputStream(client.getInputStream());
msg = (Message)obj.readObject();
if(msg.senderID!=null && msg.msgText!=null)
{
f.ta.append(msg.senderID+" >> "+msg.msgText+"\n");
}
name = msg.senderID;
for(int i=0;i<flag.count;i++)
{
try{
ObjectOutputStream objw = new ObjectOutputStream(count[i].getOutputStream());
objw.writeObject(msg);
}catch(Exception e)
{}
}
}
if(server.isClosed())
{
for(int i=0;i<flag.count;i++)
{
try{
count[i].close();
}
catch(Exception e)
{
}
}
}
}
catch(Exception e)
{
f.ta.append(name+" is offline\n");
try
{
msg.msgText = " is offline\n";
for(int i=0;i<flag.count;i++)
{
try{
ObjectOutputStream objw = new ObjectOutputStream(count[i].getOutputStream());
objw.writeObject(msg);
}catch(Exception ex)
{}
}
client.close();
}
catch(Exception ex)
{
}
}
}
}
class mywindowadapter extends WindowAdapter
{
ser f;
public mywindowadapter(ser j)
{
f = j;
}
public void windowClosing(WindowEvent we)
{
f.setVisible(false);
try{
f.server.close();
}
catch(Exception e)
{
}
f.dispose();
System.exit(0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -