import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;
public class ChatServer extends JFrame{
private ObjectInputStream s_in;
private ObjectOutputStream s_out;
private JTextField s_enter;
private JTextArea s_dialog;
private int clientnum=0;
public ChatServer(){
super("服务器端聊天窗口");
Container c=getContentPane();
c.setLayout(new BorderLayout());
s_enter=new JTextField();
c.add(s_enter, BorderLayout.NORTH);
s_enter.setEditable(false);
s_dialog=new JTextArea();
c.add(new JScrollPane(s_dialog),BorderLayout.CENTER);
s_enter.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try{
String s=e.getActionCommand();
s_out.writeObject(s);
s_out.flush();
s_dialogShow("服务器:"+s);
s_enter.setText("");
}
catch(Exception ew){
JOptionPane.showMessageDialog(null, ew.getStackTrace(), "通讯错误",JOptionPane.ERROR_MESSAGE);
}
}
});
}
public void s_dialogShow(String s){
s_dialog.setText(s+"\n");
s_dialog.setCaretPosition(s_dialog.getText().length());
s_enter.requestFocusInWindow();
}
public void s_run(){
try{
ServerSocket s=new ServerSocket(5000);
while(true){
String message;
JOptionPane.showMessageDialog(null, "通讯连接strat Server1");
Socket s1=s.accept();
clientnum++;
s_dialogShow("来自客户端"+clientnum+"的连接建立!");
s_in=new ObjectInputStream(s1.getInputStream());
s_out=new ObjectOutputStream(s1.getOutputStream());//????????????????????????????
JOptionPane.showMessageDialog(null, "通讯连接strat Server2");
//s_dialogShow("来自客户端"+clientnum+"的连接建立!");
s_out.writeObject("与服务器连接建立!");
s_enter.setEditable(true);
s_out.flush();
do{
message=(String)s_in.readObject();
s_dialogShow("客户端"+clientnum+":"+message);
}while(!isEnd(message));
//此处为客户端请求退出连接,应让通知客户端断开
s_out.writeObject("quit");
s_out.flush();
s_out.close();
s_in.close();
s.close();
}
}
catch(Exception e){
JOptionPane.showMessageDialog(null, "通讯出现错误server!", "连接错误",JOptionPane.ERROR_MESSAGE);
}
}
public boolean isEnd(String m){
String s[]={"结束","quit","end","q"};
for(int i=0;i<s.length;i++)
if(m.equals(s[i])) return true;
return false;
}
public static void main(String args[]){
ChatServer ServerApp=new ChatServer();
ServerApp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ServerApp.setSize(600, 400);
ServerApp.setVisible(true);
ServerApp.s_run();
}
}import java.awt.*;
import java.awt.event.*;
import javax.swing.*;import java.io.*;
import java.net.Socket;
import java.net.ServerSocket;
public class ChatClient extends JFrame{
private JTextField c_enter;
private JTextArea c_dialog;
private ObjectInputStream c_in;
private ObjectOutputStream c_out;
public ChatClient(){
super("客户端聊天窗口");
Container c=getContentPane();
c.setLayout(new BorderLayout());
c_enter=new JTextField();
c_enter.setEditable(false);
c.add(c_enter, BorderLayout.NORTH);
c_dialog=new JTextArea();
c.add(new JScrollPane(c_dialog), BorderLayout.CENTER);
c_enter.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try{
String s=e.getActionCommand();
c_out.writeObject(s);
c_out.flush();
c_dialogShow("自己:"+s);
c_enter.setText("");
}
catch(Exception ew){
JOptionPane.showMessageDialog(null, ew.getStackTrace(), "通讯错误",JOptionPane.ERROR_MESSAGE);
}
}
});
}
public void c_run(){
try{
Socket s=new Socket("",5000);
String message;
JOptionPane.showMessageDialog(null, "通讯连接strat Client");
c_in=new ObjectInputStream(s.getInputStream());
c_out=new ObjectOutputStream(s.getOutputStream());
c_enter.setEditable(true);
do{
message=(String)c_in.readObject();
c_dialogShow("服务器:"+message);
}while(!isEnd(message));
c_out.writeObject("q");
c_out.flush();
c_in.close();
c_out.close();
s.close();
System.exit(0);
}
catch(Exception e){
JOptionPane.showMessageDialog(null, "通讯连接错误client", "通讯错误",JOptionPane.ERROR_MESSAGE);
}
}
public void c_dialogShow(String s){
c_dialog.setText(s+"\n");
c_dialog.setCaretPosition(c_dialog.getText().length());
c_enter.requestFocusInWindow();
}
public boolean isEnd(String m){
String s[]={"结束","quit","end","q"};
for(int i=0;i<s.length;i++)
if(m.equals(s[i])) return true;
return false;
}
public static void main(String[] args){
ChatClient clientApp=new ChatClient();
clientApp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
clientApp.setSize(new Dimension(600,400));
clientApp.setVisible(true);
//if(args.length==0)
clientApp.c_run( );
//else clientApp.c_run(args[0], 6000);
}
}
先运行的ChatServer 在运行的ChatClient
结果程序停在ChatServer的
s_in=new ObjectInputStream(s1.getInputStream());
s_out=new ObjectOutputStream(s1.getOutputStream());
这了,为什么????
import java.awt.event.*;
import javax.swing.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;
public class ChatServer extends JFrame{
private ObjectInputStream s_in;
private ObjectOutputStream s_out;
private JTextField s_enter;
private JTextArea s_dialog;
private int clientnum=0;
public ChatServer(){
super("服务器端聊天窗口");
Container c=getContentPane();
c.setLayout(new BorderLayout());
s_enter=new JTextField();
c.add(s_enter, BorderLayout.NORTH);
s_enter.setEditable(false);
s_dialog=new JTextArea();
c.add(new JScrollPane(s_dialog),BorderLayout.CENTER);
s_enter.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try{
String s=e.getActionCommand();
s_out.writeObject(s);
s_out.flush();
s_dialogShow("服务器:"+s);
s_enter.setText("");
}
catch(Exception ew){
JOptionPane.showMessageDialog(null, ew.getStackTrace(), "通讯错误",JOptionPane.ERROR_MESSAGE);
}
}
});
}
public void s_dialogShow(String s){
s_dialog.setText(s+"\n");
s_dialog.setCaretPosition(s_dialog.getText().length());
s_enter.requestFocusInWindow();
}
public void s_run(){
try{
ServerSocket s=new ServerSocket(5000);
while(true){
String message;
JOptionPane.showMessageDialog(null, "通讯连接strat Server1");
Socket s1=s.accept();
clientnum++;
s_dialogShow("来自客户端"+clientnum+"的连接建立!");
s_in=new ObjectInputStream(s1.getInputStream());
s_out=new ObjectOutputStream(s1.getOutputStream());//????????????????????????????
JOptionPane.showMessageDialog(null, "通讯连接strat Server2");
//s_dialogShow("来自客户端"+clientnum+"的连接建立!");
s_out.writeObject("与服务器连接建立!");
s_enter.setEditable(true);
s_out.flush();
do{
message=(String)s_in.readObject();
s_dialogShow("客户端"+clientnum+":"+message);
}while(!isEnd(message));
//此处为客户端请求退出连接,应让通知客户端断开
s_out.writeObject("quit");
s_out.flush();
s_out.close();
s_in.close();
s.close();
}
}
catch(Exception e){
JOptionPane.showMessageDialog(null, "通讯出现错误server!", "连接错误",JOptionPane.ERROR_MESSAGE);
}
}
public boolean isEnd(String m){
String s[]={"结束","quit","end","q"};
for(int i=0;i<s.length;i++)
if(m.equals(s[i])) return true;
return false;
}
public static void main(String args[]){
ChatServer ServerApp=new ChatServer();
ServerApp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ServerApp.setSize(600, 400);
ServerApp.setVisible(true);
ServerApp.s_run();
}
}import java.awt.*;
import java.awt.event.*;
import javax.swing.*;import java.io.*;
import java.net.Socket;
import java.net.ServerSocket;
public class ChatClient extends JFrame{
private JTextField c_enter;
private JTextArea c_dialog;
private ObjectInputStream c_in;
private ObjectOutputStream c_out;
public ChatClient(){
super("客户端聊天窗口");
Container c=getContentPane();
c.setLayout(new BorderLayout());
c_enter=new JTextField();
c_enter.setEditable(false);
c.add(c_enter, BorderLayout.NORTH);
c_dialog=new JTextArea();
c.add(new JScrollPane(c_dialog), BorderLayout.CENTER);
c_enter.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try{
String s=e.getActionCommand();
c_out.writeObject(s);
c_out.flush();
c_dialogShow("自己:"+s);
c_enter.setText("");
}
catch(Exception ew){
JOptionPane.showMessageDialog(null, ew.getStackTrace(), "通讯错误",JOptionPane.ERROR_MESSAGE);
}
}
});
}
public void c_run(){
try{
Socket s=new Socket("",5000);
String message;
JOptionPane.showMessageDialog(null, "通讯连接strat Client");
c_in=new ObjectInputStream(s.getInputStream());
c_out=new ObjectOutputStream(s.getOutputStream());
c_enter.setEditable(true);
do{
message=(String)c_in.readObject();
c_dialogShow("服务器:"+message);
}while(!isEnd(message));
c_out.writeObject("q");
c_out.flush();
c_in.close();
c_out.close();
s.close();
System.exit(0);
}
catch(Exception e){
JOptionPane.showMessageDialog(null, "通讯连接错误client", "通讯错误",JOptionPane.ERROR_MESSAGE);
}
}
public void c_dialogShow(String s){
c_dialog.setText(s+"\n");
c_dialog.setCaretPosition(c_dialog.getText().length());
c_enter.requestFocusInWindow();
}
public boolean isEnd(String m){
String s[]={"结束","quit","end","q"};
for(int i=0;i<s.length;i++)
if(m.equals(s[i])) return true;
return false;
}
public static void main(String[] args){
ChatClient clientApp=new ChatClient();
clientApp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
clientApp.setSize(new Dimension(600,400));
clientApp.setVisible(true);
//if(args.length==0)
clientApp.c_run( );
//else clientApp.c_run(args[0], 6000);
}
}
先运行的ChatServer 在运行的ChatClient
结果程序停在ChatServer的
s_in=new ObjectInputStream(s1.getInputStream());
s_out=new ObjectOutputStream(s1.getOutputStream());
这了,为什么????
message = (String) s_in.readObject();
s_dialogShow("客户端" + clientnum + ":" + message);
} while (!isEnd(message));
//此处为客户端请求退出连接,应让通知客户端断开
s_out.writeObject("quit");
s_out.flush();
s_out.close();
s_in.close();
s.close();
import java.awt.*;
import java.awt.event.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;public class ChatServer extends JFrame { private ObjectInputStream s_in;
private ObjectOutputStream s_out;
private JTextField s_enter;
private JTextArea s_dialog;
private int clientnum = 0; public ChatServer() {
super("服务器端聊天窗口");
Container c = getContentPane();
c.setLayout(new BorderLayout());
s_enter = new JTextField();
c.add(s_enter, BorderLayout.NORTH);
s_enter.setEditable(false);
s_dialog = new JTextArea();
c.add(new JScrollPane(s_dialog), BorderLayout.CENTER);
s_enter.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
try {
String s = e.getActionCommand();
s_out.writeObject(s);
s_out.flush();
s_dialogShow("服务器:" + s);
s_enter.setText("");
} catch (Exception ew) {
JOptionPane.showMessageDialog(null, ew.getStackTrace(), "通讯错误", JOptionPane.ERROR_MESSAGE);
}
}
});
} public void s_dialogShow(String s) {
s_dialog.setText(s + "\n");
s_dialog.setCaretPosition(s_dialog.getText().length());
s_enter.requestFocusInWindow();
} public void s_run() {
try {
ServerSocket s = new ServerSocket(5000);
while (true) {
JOptionPane.showMessageDialog(null, "通讯连接strat Server1");
final Socket s1 = s.accept();
clientnum++;
new Thread(new Runnable() {////////////////////////////////// public void run() {
try {
sss(s1);
} catch (IOException ex) {
Logger.getLogger(ChatServer.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(ChatServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}).start();
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "通讯出现错误server!", "连接错误", JOptionPane.ERROR_MESSAGE);
}
} //////////////////////////////////////
private void sss(Socket s1) throws IOException, ClassNotFoundException { String message;
s_dialogShow(s_dialog.getText() + "来自客户端" + clientnum + "的连接建立!");
s_in = new ObjectInputStream(s1.getInputStream());
s_out = new ObjectOutputStream(s1.getOutputStream());//????????????????????????????
JOptionPane.showMessageDialog(null, "通讯连接strat Server2");
//s_dialogShow("来自客户端"+clientnum+"的连接建立!");
s_out.writeObject("与服务器连接建立!");
s_enter.setEditable(true);
s_out.flush(); do {
message = (String) s_in.readObject();
s_dialogShow("客户端" + clientnum + ":" + message);
} while (!isEnd(message));
//此处为客户端请求退出连接,应让通知客户端断开
s_out.writeObject("quit");
s_out.flush();
s_out.close();
s_in.close();
} public boolean isEnd(String m) {
String s[] = {"结束", "quit", "end", "q"};
for (int i = 0; i < s.length; i++) {
if (m.equals(s[i])) {
return true;
}
}
return false;
} public static void main(String args[]) {
final ChatServer ServerApp = new ChatServer();
ServerApp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ServerApp.setSize(600, 400);
ServerApp.setVisible(true);
ServerApp.s_run();
new Thread(new Runnable() {////////////////// public void run() {
ServerApp.s_run();
}
}).start();
}
}