java中的DataInputStream和DataOutputStream提供的方法readUTF和writeUTF,它的用法就不说了,只提醒一下他们的注意事项,这两个方法如果不再循环中进行读写操作,那么,他们在进行完一次读写操作后就会自动关闭,这是我在写一个聊天室的时候遇到的,最终的解决方法是:每次调用事件响应时现在该事件的函数内重新初始化DataInputStream和DataOutputStream。
例如:
jbtnSend.addActionListener
(
new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
String currentFriend=jlblCurrentFriend.getText();
String commandServer;
String speaker;
String speakerIndex;
String receiver;
String receiverIndex;
String messageToServer;
speakerIndex=index+"\n";
speaker=(index+101+"").substring(1)+" "+nickName+"\n";
if(currentFriend.equals("00所有人"))
{
commandServer="all\n";
messageToServer=commandServer+speaker+jtxtMessage.getText();
jtxaChatContent.append("你向所有人喊道:"+jtxtMessage.getText()+"\n");
}
else
{
commandServer="sigle\n";
receiver=jlblCurrentFriend.getText()+"\n";
receiverIndex=receiver.substring(0, 2);
receiverIndex=(Integer.parseInt(receiverIndex)-1)+"\n";
messageToServer=commandServer+speakerIndex+speaker+receiverIndex+receiver+jtxtMessage.getText();
jtxaChatContent.append("你对"+currentFriend+"说:"+jtxtMessage.getText()+"\n");
}
try
{
Socket s = new Socket("localhost",54188);
out=new DataOutputStream(s.getOutputStream());
out.writeUTF(messageToServer);
jtxtMessage.setText("");
} catch (IOException e1)
{
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
}
}
);