当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
计算机二级辅导:java网络通信小程序
发布时间:2010/4/5 17:18:24 来源:城市学习网 编辑:admin
  //ChatServer.java文件
  import java.io.*;
  import java.net.*;
  import java.util.*;
  public class ChatServer {
  boolean started = false;
  ServerSocket ss = null;
  ListClient clients = new ArrayListClient();
  public static void main(String args) {
  new ChatServer().start();
  }
  public void start() {
  try {
  ss = new ServerSocket(8888);
  started = true;
  } catch (BindException e) {
  System.out.println("端口使用中....");
  System.out.println("请关掉相关程序并重新运行服务器!");
  System.exit(0);
  } catch (IOException e) {
  e.printStackTrace();
  }
  try {
  while(started) {
  Socket s = ss.accept();
  Client c = new Client(s);
  System.out.println("a client connected!");
  new Thread(c).start();
  clients.add(c);
  //dis.close();
  }
  } catch (IOException e) {
  e.printStackTrace();
  } finally {
  try {
  ss.close();
  } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  }
  }
  }
  class Client implements Runnable {
  private Socket s;
  private DataInputStream dis = null;
  private DataOutputStream dos = null;
  private boolean bConnected = false;
  public Client(Socket s) {
  this.s = s;
  try {
  dis = new DataInputStream(s.getInputStream());
  dos = new DataOutputStream(s.getOutputStream());
  bConnected = true;
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  public void send(String str) {
  try {
  dos.writeUTF(str);
  } catch (IOException e) {
  clients.remove(this);
  System.out.println("对方退出了!我从List里面去掉了!");
  //e.printStackTrace();
  }
  }
  public void run() {
  try {
  while(bConnected) {
  String str = dis.readUTF();
  System.out.println(str);
  for(int i=0; iclients.size(); i++) {
  Client c = clients.get(i);
  c.send(str);
  //System.out.println(" a string send !");
  }
  /*
  for(IteratorClient it = clients.iterator(); it.hasNext(); ) {
  Client c = it.next();
  c.send(str);
  }
  */
  /*
  IteratorClient it = clients.iterator();
  while(it.hasNext()) {
  Client c = it.next();
  c.send(str);
  }
  */
  }
  } catch (EOFException e) {
  System.out.println("Client closed!");
  } catch (IOException e) {
  e.printStackTrace();
  } finally {
  try {
  if(dis != null) dis.close();
  if(dos != null) dos.close();
  if(s != null) {
  s.close();
  //s = null;
  }
  } catch (IOException e1) {
  e1.printStackTrace();
  }
  }
  }
  }
  }
  //ChatClient.java文件
  import java.awt.*;
  import java.awt.event.*;
  import java.io.*;
  import java.net.*;
  public class ChatClient extends Frame {
  Socket s = null;
  DataOutputStream dos = null;
  DataInputStream dis = null;
  private boolean bConnected = false;
  TextField tfTxt = new TextField();
  TextArea taContent = new TextArea();
  Thread tRecv = new Thread(new RecvThread());
  public static void main(String args) {
  new ChatClient().launchFrame();
  }
  public void launchFrame() {
  setLocation(400, 300);
  this.setSize(300, 300);
  add(tfTxt, BorderLayout.SOUTH);
  add(taContent, BorderLayout.NORTH);
  pack();
  this.addWindowListener(new WindowAdapter() {
  @Override
  public void windowClosing(WindowEvent arg0) {
  disconnect();
  System.exit(0);
  }
  });
  tfTxt.addActionListener(new TFListener());
  setVisible(true);
  connect();
  tRecv.start();
  }
  public void connect() {
  try {
  s = new Socket("127.0.0.1", 8888);
  dos = new DataOutputStream(s.getOutputStream());
  dis = new DataInputStream(s.getInputStream());
  System.out.println("connected!");
  bConnected = true;
  } catch (UnknownHostException e) {
  e.printStackTrace();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  public void disconnect() {
  try {
  dos.close();
  dis.close();
  s.close();
  } catch (IOException e) {
  e.printStackTrace();
  }
  /*
  try {
  bConnected = false;
  tRecv.join();
  } catch(InterruptedException e) {
  e.printStackTrace();
  } finally {
  try {
  dos.close();
  dis.close();
  s.close();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  */
  }
  private class TFListener implements ActionListener {
  public void actionPerformed(ActionEvent e) {
  String str = tfTxt.getText().trim();
  //taContent.setText(str);
  tfTxt.setText("");
  try {
  //System.out.println(s);
  dos.writeUTF(str);
  dos.flush();
  //dos.close();
  } catch (IOException e1) {
  e1.printStackTrace();
  }
  }
  }
  private class RecvThread implements Runnable {
  public void run() {
  try {
  while(bConnected) {
  String str = dis.readUTF();
  //System.out.println(str);
  taContent.setText(taContent.getText() + str + ‘“n‘);
  }
  } catch (SocketException e) {
  System.out.println("退出了,bye!");
  } catch (EOFException e) {
  System.out.println("推出了,bye - bye!");
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  }
  }
  :
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved