Java简单聊天室第一个版本

客户端代码:

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();
  }
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值