package com.yqq.app3; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; class ChatReceive extends Thread{ private Socket socket; public ChatReceive(Socket socket){ this.socket=socket; } @Override public void run() { this.receiveMsg(); } private void receiveMsg(){ BufferedReader br =null; try { br=new BufferedReader(new InputStreamReader(this.socket.getInputStream())); while(true){ String msg = br.readLine(); //将数据加入数据公共区域 synchronized ("yqq"){ ChatRoomServer.buf="["+this.socket.getInetAddress()+"]"+msg; //唤醒等待的线程,被相同锁对象使用者 "yqq".notifyAll(); } } }catch (Exception e){ e.printStackTrace(); }finally { if(br!=null){ try { br.close(); } catch (IOException e) { e.printStackTrace(); } } if(this.socket!=null){ try { this.socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } } class ChatSend extends Thread{ Socket socket=null; public ChatSend(Socket socket){ this.socket=socket; } @Override public void run() { this.sendMsg(); } private void sendMsg(){ PrintWriter pw =null; try { pw =new PrintWriter(this.socket.getOutputStream()); while (true){ synchronized ("yqq"){ //让发送消息的线程处于等待状态 "yqq".wait(); //将公共数据区中的消息发送给客户端 pw.println(ChatRoomServer.buf); pw.flush(); } } }catch (Exception e){ e.printStackTrace(); }finally { if(pw!=null){ pw.close(); } if(this.socket!=null){ try { this.socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } } public class ChatRoomServer { //定义公共数据区 public static String buf; public static void main(String[] args) { System.out.println("Chat Server Version 1.0"); System.out.println("Listen at 8888"); ServerSocket serverSocket =null; try { serverSocket=new ServerSocket(8888); while (true){ Socket socket=serverSocket.accept(); System.out.println("连接到:"+socket.getInetAddress()); new ChatReceive(socket).start(); new ChatSend(socket).start(); } }catch (Exception e){ e.printStackTrace(); }finally { if(serverSocket!=null){ try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } } }4.创建客户端
package com.yqq.app3; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; class Send1 extends Thread{ private Socket socket; private Scanner scanner; public Send1(Socket socket,Scanner scanner){ this.socket = socket; this.scanner = scanner; } @Override public void run() { this.sendMsg(); } private void sendMsg(){ PrintWriter pw = null; try{ //创建向对方输出消息的流对象 pw = new PrintWriter(this.socket.getOutputStream()); while(true){ String msg = scanner.nextLine(); pw.println(msg); pw.flush(); } }catch(Exception e){ e.printStackTrace(); }finally { if(scanner != null ){ scanner.close(); } if(pw != null){ pw.close(); } if(this.socket != null){ try { this.socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } } class Receive1 extends Thread{ private Socket socket; public Receive1(Socket socket){ this.socket = socket; } @Override public void run() { this.receiveMsg(); } private void receiveMsg(){ BufferedReader br = null; try{ //创建用于接收对方发送消息的流对象 br = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); while(true){ String msg = br.readLine(); System.out.println("他说:"+msg); } }catch(Exception e){ e.printStackTrace(); }finally{ if(br != null){ try { br.close(); } catch (IOException e) { e.printStackTrace(); } } if(this.socket != null){ try { this.socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } } public class GoodTCP { public static void main(String[] args) { Scanner scanner = null; ServerSocket serverSocket = null; Socket socket = null; try{ scanner = new Scanner(System.in); System.out.println("请输入:server,5.通信或者: , "); String str = scanner.nextLine(); String[] arr = str.split(","); if("server".equals(arr[0])){ //启动服务端 System.out.println("TCP Server Listen at "+arr[1]+" ....."); serverSocket = new ServerSocket(Integer.parseInt(arr[1])); socket = serverSocket.accept(); System.out.println("连接成功!"); }else{ //启动客户端 socket = new Socket(arr[0],Integer.parseInt(arr[1])); System.out.println("连接成功!"); } //启动发送消息的线程 new Send1(socket,scanner).start(); //启动接收消息的线程 new Receive1(socket).start(); }catch(Exception e){ e.printStackTrace(); }finally{ if(serverSocket != null){ try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
客户端:
客户端1:
客户端2:
总服务器:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)