通过套接字发送和接收数据

时间:2015-03-23 08:20:08

标签: java swing sockets

我的代码中有两个Jtextarea。我有一个连接按钮,点击连接后它连接到服务器。 我有一个发送按钮。当我在第一个jtextarea中键入任何内容并单击“发送”按钮时,应该将其收回并打印在第二个jtextarea中。

我的问题是,当我第一次发送数据时,我正在正确地接收数据但是当我第二次发送数据时,我没有收到它。当我发送第三个数据时,我收到第二个数据并继续。

请提前帮助。谢谢 这是我的代码。

public class send extends JFrame
{

  Socket s;

  int port=3000;

  String host="192.168.1.3"

  public static void main(String[] args) {

    EventQueue.invokeLater(new Runnable() {

      public void run(){
        send s=new send();
        s.setvisible(true);
       }
     });

   } 

public send() {


   setDrfaultCloseOperation(EXIT_ON_CLOSE);

   setResizable(false); 

   setBounds(100,100,400,600);

   Jpanel ContentPane=new Jpanel();

   contentPane.setBorder(new EmptyBorder(5,5,5,5);

   setContentPane(contentpane);


   contentPane.setLayout(null);

   JButton connect=new Jbutton("connect");

   connect.setBounds(15,10,100,40);

   connect.addActionListener(new ActionListener(){

       public void actionPerformed(ActionEvent e{

          try{

             addr=InetAddress.getByName(host);
             s=new Socket(addr,port);
           }
          catch(UnknownHostException e1)
           {
             e1.printStackTrace();
           }  
          catch(IOException e2)
           {
             e2.printStackTrace();
           }
         }
       });
     contentPane.add(connect);

     JTextArea area=new JtextArea(); 
     area.setBounds(15,70,100,40);
     contentPane.add(area);

     JButton btn=new JButton("send"):
     btn.setBounds(15,70,170,80);
     btn.addActionListener(new ActionListener()
     {
       public void actionPerformed(ActionEvent e)
        { 
          if(!(area.getText().trim.isEmpty())
           {
             try
              {
                PrintStream ps=new PrintStream(s.getOutputStream());
                ps.println(area.getText());
                InputStreamReader in=new InputStreamReader(s.getInputStream());
                BufferedReader br=new BufferedReader(in);

                String msg=br.readLine();
                if(msg!=null)
                  {
                    txt.append("s:"+area.getText()+"\n");
                    txt.append(msg+"\n");
                    area.setText("");
                  }
             catch(IOException e3)
                {
                    e3.printStackTrace();
                }
             }
          }
      });
     contentPane(btn);

     JTextArea txt=new JtextArea();
     txt.setBounds(15,210,290,300);
     contentPane.add(txt);
  }
}

1 个答案:

答案 0 :(得分:0)

只需刷新流:

ps.println(area.getText());
ps.flush();