天天看点

套接字聊天程序

以下是两个程序是图形用户界面套接字聊天程序,但是问题是第一次输入信息后,在对方信息栏里显示消息,而第二次以及以后再输入信息发送后,并不在对方的信息栏里显示第二次的消息,还请大家帮忙看看,谢谢啦!

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();

 }

}