首页  ·  知识 ·  编程语言
java网络通信小程序
网友  收集  Java  编辑:德仔   图片来源:网络
//ChatServer.java文件   import java.io.*;   import java.net.*;/p&g

//ChatServer.java文件

  import java.io.*;

  import java.net.*;

  import java.util.*;

  public class ChatServer {

  boolean started = false;

  ServerSocket ss = null;

  List<Client> clients = new ArrayList<Client>();

  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; i<clients.size(); i++) {

  Client c = clients.get(i);

  c.send(str);

  //System.out.println(" a string send !");

  }

  /*

  for(Iterator<Client> it = clients.iterator(); it.hasNext(); ) {

  Client c = it.next();

  c.send(str);

  }

  */

  /*

  Iterator<Client> 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();

  }

  }

  }

  }
 

本文作者:网友 来源:网络收集
CIO之家 www.ciozj.com 微信公众号:imciow
    >>频道首页  >>网站首页   纠错  >>投诉
版权声明:CIO之家尊重行业规范,每篇文章都注明有明确的作者和来源;CIO之家的原创文章,请转载时务必注明文章作者和来源;
延伸阅读
也许感兴趣的
我们推荐的
主题最新
看看其它的