为什么,我第一次可以向服务器发送信息,而第二次却发不出去了??
请高手指教.
代码如下:
package net.java;import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;public class InterFace extends Thread{ /**
 * @param args
 */
private JLabel jlIP = null,
   jlPort = null,
   jlOrder = null,
   jlStatue = null;
private JTextField jtIP = null,
   jtPort = null,
   jtOrder = null;
private JTextArea jaServer = null,
     jaClient = null;
private JButton jb = null;
private JPanel jpTop = null,
   jpBottom = null,
   jpBottom1 = null,
   jpBottom2 = null;
private JFrame jframe = null;
private JSplitPane jsp = null;


static Socket so = null;
String order = null;
static boolean isLogin = false;
static OutputStream sfos = null;
static InputStream sfis = null;
static PrintWriter spw = null;
static BufferedReader sbuff = null;
String s = null;


public InterFace()
{
jframe = new JFrame("FTP客户端");
jpTop = new JPanel();
jpTop.setLayout(new FlowLayout());
jlIP = new JLabel();
jlIP.setText("IP:");
jtIP = new JTextField(11);
jtIP.setText("192.168.0.9");
jlPort = new JLabel();
jlPort.setText("Port:");
jtPort = new JTextField(6);
jtPort.setText("9090");
jb = new JButton("登陆");
jpTop.add(jlIP);
jpTop.add(jtIP);
jpTop.add(jlPort);
jpTop.add(jtPort);
jpTop.add(jb);

jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
jaServer = new JTextArea(20,20);
jaServer.setText("服务器:");
JScrollPane jcp1 =new JScrollPane();
jcp1.getViewport().add(jaServer);
jaClient = new JTextArea(20,20);
jaClient.setText("客户机:");
JScrollPane jcp2 =new JScrollPane();
jcp2.getViewport().add(jaClient);

jsp.add(jcp1);
jsp.add(jcp2);

jpBottom1 = new JPanel();
jpBottom1.setLayout(new FlowLayout(FlowLayout.LEFT));
jlOrder = new JLabel();
jlOrder.setText("输入命令:");
jtOrder = new JTextField(20);
jpBottom1.add(jlOrder);
jpBottom1.add(jtOrder);

jpBottom2 = new JPanel();
jpBottom2.setLayout(new FlowLayout(FlowLayout.LEFT));
jlOrder = new JLabel();
jlOrder.setText("状态:");
jpBottom2.add(jlOrder);

jpBottom = new JPanel();
jpBottom.setLayout(new BorderLayout());
jpBottom.add("North",jpBottom1);
jpBottom.add("South",jpBottom2);

Container  jf = jframe.getContentPane();
jf.setLayout(new BorderLayout());
jf.add("North",jpTop);

jf.add("Center",jsp);
jf.add("South",jpBottom);
///////////////////////////////////////
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ActionListener al = new ActionHandle();
jb.addActionListener(al);
jtPort.addActionListener(al);
ActionListener al1 = new ActionHand();
jtOrder.addActionListener(al1);
//ActionListener al1 = al.new ActionHand();
///////////////////////////////////////
jframe.setLocation(100,100);
jframe.setSize(500,600);
jframe.setResizable(true);
jframe.setVisible(true);


}//构造函数



public static void main(String[] args) {
// TODO Auto-generated method stub
new InterFace(); }

class ActionHandle implements ActionListener
{ public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub

try {
so = new Socket(jtIP.getText(),(Integer.parseInt(jtPort.getText())));
jlOrder.setText("状态:已经登陆!");
sfos = so.getOutputStream();
sfis = so.getInputStream();
spw =new PrintWriter(sfos);
sbuff = new BufferedReader(new InputStreamReader(sfis));
isLogin = true; } catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }

// public void communication(String ss) {
//
// spw.println(ss);
// spw.flush();
// try {
// s = sbuff.readLine();
// System.out.println("fasong"+s);
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// jaServer.setText("服务器:"+"\n"+s);


//}


class ActionHand  implements ActionListener
{ public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
if(isLogin)
{
//System.out.println("aaa");
order = jtOrder.getText();
//System.out.println(order);
System.out.println(order+"222");
jtOrder.setText("");
spw.println(order+"test");
spw.flush();
try {
s = sbuff.readLine();
System.out.println("fasong"+s);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
jaServer.setText("服务器:"+"\n"+s);

}

}

}
}
服务器端
package net.java;import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;public class Server  { /**
 * @param args
 */
private ServerSocket sc = null;
public static boolean isStop = false;
private Socket so = null;
public Server() 
{
try {
sc = new ServerSocket(9090);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

public void accept()
{
System.out.println("服务器启动,开始倾听!......");
while(!isStop)
{
try {
so = sc.accept();
System.out.println(so.getInetAddress()+"已经连接!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
new MyThread(so).start();
}
}

public static void main(String[] args)
{
Server s=new Server();
s.accept();

}


}class MyThread extends Thread
{
Socket so = null;
BufferedReader pr = null;
PrintWriter pw = null;
public MyThread(Socket so)
{
this.so = so;
}

public void run()
{
String order = null;
try {
do
{
//System.out.println("11");
pr = new BufferedReader(new InputStreamReader(so.getInputStream()));
pw = new PrintWriter(so.getOutputStream());
order = pr.readLine();
System.out.println("收到"+order);
pw.println("发送"+order.length());
pw.flush();
}
while(order.equalsIgnoreCase("quit"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}

解决方案 »

  1.   

    这个当按下回车时,将jtOrder的内容发送到服务器,可是我第一次可以正常收发.但是第二次在jtOrder输入新的内容,按回车后却发不出去,程序吊在这里了.spw为PrintWriter
    class ActionHand  implements ActionListener
    { public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub
    if(isLogin)
    {
    order = jtOrder.getText();
    jtOrder.setText("");
    spw.println(order+"test");
    spw.flush();
    try {
    s = sbuff.readLine();
    System.out.println("fasong"+s);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    jaServer.setText("服务器:"+"\n"+s);

    }

    }