天天看點

套接字聊天程式

以下是兩個程式是圖形使用者界面套接字聊天程式,但是問題是第一次輸入資訊後,在對方資訊欄裡顯示消息,而第二次以及以後再輸入資訊發送後,并不在對方的資訊欄裡顯示第二次的消息,還請大家幫忙看看,謝謝啦!

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import java.net.*;

import javax.swing.*;

public class TalkEachOther extends JFrame implements Runnable

{

 private static final long serialVersionUID = -7837855188092321634L;

 private Button button0,button,button1;

 private JTextField text,text1;

 private JPasswordField password;

 private Thread thread;

 private DataInputStream input;

 private DataOutputStream output;

 private JTextArea area,area1;

 public TalkEachOther()

 {

  super("聊天程式1");

  super.setSize(400,320);

  Container c=this.getContentPane();

  GridLayout grid=new GridLayout(3,1);

  c.setLayout(grid);

  JPanel panel=new JPanel();

  Label label1=new Label("使用者名:");

  text=new JTextField(8);

  Label label2=new Label("使用者密碼:");

  password=new JPasswordField(8);

  button0=new Button("登入");

  panel.add(label1);

  panel.add(text);

  panel.add(label2);

  panel.add(password);

  panel.add(button0);

  text1=new JTextField(15);

  text1.setEditable(false);

  panel.add(text1);

  c.add(panel);

  JPanel panel1=new JPanel(new GridLayout(1,2));

  JPanel panel1_1=new JPanel();

  Label label3=new Label("請輸入資訊:");

  area=new JTextArea(3,15);

  area.setEditable(false);

  area.setLineWrap(true);

  area.setWrapStyleWord(false);

  JScrollPane pane=new JScrollPane(area);

  button=new Button("發送消息");

  button1=new Button("清除資訊");

  panel1_1.add(label3);

  panel1_1.add(pane);

  JPanel panel1_2=new JPanel(new FlowLayout());

  JPanel panel1_2_0=new JPanel(new GridLayout(2,1));

  JPanel panel1_2_1=new JPanel();

  panel1_2_1.add(button);

  JPanel panel1_2_2=new JPanel();

  panel1_2_2.add(button1);

  panel1_2_0.add(panel1_2_1);

  panel1_2_0.add(panel1_2_2);

  panel1_2.add(panel1_2_0);

  panel1.add(panel1_1);

  panel1.add(panel1_2);

  c.add(panel1);

  JPanel panel2=new JPanel();

  area1=new JTextArea(4,32);

  area1.setEditable(false);

  area1.setLineWrap(true);

  area1.setWrapStyleWord(false);

  JScrollPane pane1=new JScrollPane(area1);

  panel2.add(pane1);

  c.add(panel2);

  thread=new Thread(this);

  MyListener listener=new MyListener();

  button0.addActionListener(listener);

  button.addActionListener(listener);

  button1.addActionListener(listener);

  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  super.setVisible(true);

  thread.start();

  super.setResizable(false);

 }

 class MyListener implements ActionListener

 {

  public void actionPerformed(ActionEvent arg0)

  {

   if(arg0.getSource()==button0)

   {

    if(text.getText().trim().equals("leo")&&password.getText().trim().equals("12345"))

    {

     text1.setText("你好!尊敬的"+text.getText().trim()+"使用者");

     area.setEditable(true);

     area1.setEditable(true);

    }

    else

    {

     text1.setText("你輸入的使用者名或密碼有誤!");

    }

   }

   if(arg0.getSource()==button)

   {

    try

    {

     area1.append(text.getText().trim()+":"+area.getText().trim()+"/n");

     Socket socket=new Socket("localhost",4000);

     output=new DataOutputStream(socket.getOutputStream());

     output.writeUTF(text.getText().trim()+":"+area.getText().trim());//output 向外寫出資訊

     area.setText(null);

    }

    catch (UnknownHostException e)

    {

     e.printStackTrace();

    }

    catch (IOException e)

    {

     System.out.println("無法連接配接");

    }

   }

   if(arg0.getSource()==button1)

   {

    area.setText(null);

   }

  }

 }

 public void run()

 {

  try

  {

   ServerSocket server=new ServerSocket(4331);

   Socket socket1=server.accept();

   input=new DataInputStream(socket1.getInputStream());

   while(true)

   {

    String s=input.readUTF();

    area1.append(s+"/n");

   }

  }

  catch (IOException e)

  {

   System.out.println("連接配接中斷");

  }

 }

 public static void main(String[] args)

 {

  new TalkEachOther();

 }

}

*******************************************************

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import java.net.*;

import javax.swing.*;

public class TalkEachOther1 extends JFrame implements Runnable

{

 private static final long serialVersionUID = -7837855188092321634L;

 private Button button0,button,button1;

 private JTextField text,text1;

 private JPasswordField password;

 private Thread thread;

 private DataInputStream input;

 private DataOutputStream output;

 private JTextArea area,area1;

 public TalkEachOther1()

 {

  super("聊天程式2");

  super.setSize(400,320);

  Container c=this.getContentPane();

  GridLayout grid=new GridLayout(3,1);

  c.setLayout(grid);

  JPanel panel=new JPanel();

  Label label1=new Label("使用者名:");

  text=new JTextField(8);

  Label label2=new Label("使用者密碼:");

  password=new JPasswordField(8);

  button0=new Button("登入");

  panel.add(label1);

  panel.add(text);

  panel.add(label2);

  panel.add(password);

  panel.add(button0);

  text1=new JTextField(15);

  text1.setEditable(false);

  panel.add(text1);

  c.add(panel);

  JPanel panel1=new JPanel(new GridLayout(1,2));

  JPanel panel1_1=new JPanel();

  Label label3=new Label("請輸入資訊:");

  area=new JTextArea(3,15);

  area.setEditable(false);

  area.setLineWrap(true);

  area.setWrapStyleWord(false);

  JScrollPane pane=new JScrollPane(area);

  button=new Button("發送消息");

  button1=new Button("清除資訊");

  panel1_1.add(label3);

  panel1_1.add(pane);

  JPanel panel1_2=new JPanel(new FlowLayout());

  JPanel panel1_2_0=new JPanel(new GridLayout(2,1));

  JPanel panel1_2_1=new JPanel();

  panel1_2_1.add(button);

  JPanel panel1_2_2=new JPanel();

  panel1_2_2.add(button1);

  panel1_2_0.add(panel1_2_1);

  panel1_2_0.add(panel1_2_2);

  panel1_2.add(panel1_2_0);

  panel1.add(panel1_1);

  panel1.add(panel1_2);

  c.add(panel1);

  JPanel panel2=new JPanel();

  area1=new JTextArea(4,32);

  area1.setEditable(false);

  area1.setLineWrap(true);

  area1.setWrapStyleWord(false);

  JScrollPane pane1=new JScrollPane(area1);

  panel2.add(pane1);

  c.add(panel2);

  thread=new Thread(this);

  MyListener listener=new MyListener();

  button0.addActionListener(listener);

  button.addActionListener(listener);

  button1.addActionListener(listener);

  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  super.setVisible(true);

  thread.start();

  super.setResizable(false);

 }

 class MyListener implements ActionListener

 {

  public void actionPerformed(ActionEvent arg0)

  {

   if(arg0.getSource()==button0)

   {

    if(text.getText().trim().equals("lee")&&password.getText().trim().equals("12345"))

    {

     text1.setText("你好!尊敬的"+text.getText().trim()+"使用者");

     area.setEditable(true);

     area1.setEditable(true);

    }

    else

    {

     text1.setText("你輸入的使用者名或密碼有誤!");

    }

   }

   if(arg0.getSource()==button)

   {

    try

    {

     area1.append(text.getText().trim()+":"+area.getText().trim()+"/n");

     Socket socket=new Socket("localhost",4331);

     output=new DataOutputStream(socket.getOutputStream());

     output.writeUTF(text.getText().trim()+":"+area.getText().trim());//output 向外寫出資訊

     area.setText(null);

    }

    catch (UnknownHostException e)

    {

     e.printStackTrace();

    }

    catch (IOException e)

    {

     System.out.println("無法連接配接");

    }

   }

   if(arg0.getSource()==button1)

   {

    area.setText(null);

   }

  }

 }

 public void run()

 {

  try

  {

   ServerSocket server=new ServerSocket(4000);

   Socket socket1=server.accept();

   input=new DataInputStream(socket1.getInputStream());

   while(true)

   {

    String s=input.readUTF();

    area1.append(s+"/n");

   }

  }

  catch (IOException e)

  {

   System.out.println("連接配接中斷");

  }

 }

 public static void main(String[] args)

 {

  new TalkEachOther1();

 }

}