Java简单聊天室第一个版本

来源:互联网 发布:仙剑奇侠传四结局 知乎 编辑:程序博客网 时间:2024/06/05 23:35

客户端代码:

package chat;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.DataOutputStream;import java.io.IOException;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class chatClient extends Frame { TextField tf = new TextField(); TextArea ta = new TextArea(); Socket client = null; OutputStream out = null; DataOutputStream dout = null; public static void main(String[] args) {  chatClient chatF= new chatClient();  chatF.launchFrame(); } private void launchFrame() {  setLocation(300,400);   // 左、上距离  this.setSize(300,500); // 宽度,高度  add(tf,BorderLayout.SOUTH);  add(ta,BorderLayout.NORTH);  pack();      // 覆盖Textarea和textfield空白处  close();     //关闭窗口  tf.addActionListener(new TfListener());  // 注册监听器  setVisible(true);  connectServer();  // 连接服务器 } // 连接服务器 private void connectServer() {  try {   client = new Socket("127.0.0.1",10000);   out = client.getOutputStream();   dout = new DataOutputStream(out);  } catch (UnknownHostException e) {   e.printStackTrace();  } catch (IOException e) {   e.printStackTrace();  } } //关闭窗口 private void close() {  this.addWindowListener(new WindowAdapter() {   @Override   public void windowClosing(WindowEvent e) {    unconnect();    System.exit(0);   }  }); } //在关闭窗口的时候,关闭连接 public void unconnect(){  try {   dout.flush();   dout.close();  } catch (IOException e) {   // TODO Auto-generated catch block   e.printStackTrace();  } } //监听从tf的文本到ta当中。 private class TfListener implements ActionListener{  @Override  public void actionPerformed(ActionEvent e) {   String  str = tf.getText().trim();   ta.setText(str);   tf.setText("");   try {    dout.writeUTF(str);   } catch (IOException e1) {    // TODO Auto-generated catch block    e1.printStackTrace();   }  } }}

server端代码:

package chat;import java.io.DataInputStream;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;/* * 1)客户端发送消息,服务器可以接收了。 * 下一个版本要解决的:该版本存在客户端发送多条消息,服务器接收不到。 *  原因是第一次运行完之后,while(true)执行到socket.accept();阻塞主了,无法执行, dinput.readUTF(); * 解决办法:将socket.accept();移动到while语句外面。 */public class chatServer { public static void main(String[] args) {  ServerSocket socket = null;  Socket s = null;  InputStream input = null;  DataInputStream dinput = null;  try{   socket = new ServerSocket(10000);   while(true){    s= socket.accept();    System.out.println("this is a server");    input = s.getInputStream();    dinput = new DataInputStream(input);    //    String str = dinput.readUTF();    System.out.println(str);   }  }catch (IOException e){   try {    dinput.close();    input.close();   } catch (IOException e1) {    // TODO Auto-generated catch block    e1.printStackTrace();   }   e.printStackTrace();  } }}
0 0
原创粉丝点击