实现聊天室一对一

来源:互联网 发布:国际漫游数据流量套餐 编辑:程序博客网 时间:2024/06/05 07:39

第一步:建立一个服务器类
public class Server {

 public static void main(String[] args) {
  
  //启动服务器接收线程
  ServerReceiver1 sr = new ServerReceiver1();
  
  Thread t1 = new Thread(sr);
  
  t1.start();
  
  
  //启动服务器发送线程
  ServerSend2 ss = new ServerSend2();
  
  Thread t2 = new Thread(ss);
  
  t2.start();
 }
}
第二步:建立一个客户端的类
public class Client {

 public static void main(String[] args) {
  //启动客户端发送线程
  ClientSend1 cs = new ClientSend1();
  
  Thread t1 = new Thread(cs);
  
  t1.start();
  
  //启动客户端接收线程
  
  ClientReceiver2 cr = new ClientReceiver2();
  
  Thread t2 = new Thread(cr);
  
  t2.start();
 }
}
第三步:


import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class ClientSend1 implements Runnable{

 public void run(){
  send();
 }
 
 public void send() {
  //一.建立socket连接
  //2.客户端申请连接
  //只是申请连接 还没真正接通  相当于打电话拨号 对方不一定接
  Socket s = null;
  try {
   s = new Socket("localhost",8888);
  } catch (UnknownHostException e) {
   System.out.println("找不到主机,连接失败");
   e.printStackTrace();
  } catch (IOException e) {
   System.out.println("建立socket连接失败");
   e.printStackTrace();
  }
  
  //二.I/O操作
  //1.建立通道
  OutputStream os = null;
  try {
   os = s.getOutputStream();
  } catch (IOException e) {
  
   e.printStackTrace();
  }
  
  PrintWriter pw = new PrintWriter(os);
  
  
  Scanner scanner = new Scanner(System.in);
  System.out.println("---------client---------");
  System.out.println("请输入您想说的话:");
  
  String str = scanner.next();
  //2.利用write写
  pw.println(str);
  pw.flush();
  
  //---------------------一直说-----------------------
  while(!str.equals("88")){
   System.out.println("---------client---------");
   System.out.println("请输入您想说的话:");
   str = scanner.next();
   //2.利用write写
   pw.println(str);
   pw.flush();
  }
  
  //3.关闭通道
  
  
 
  //三.关闭socket连接
  if(s!=null){
   try {
    s.close();
   } catch (IOException e) {
    System.out.println("关闭socket连接失败");
    e.printStackTrace();
   }
  }
 }
}
第四步:


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;

public class ClientReceiver2 implements Runnable{


 public void run() {
  receive();
  
 }
 
 public void receive(){
  //一.建立socket连接
  //2.客户端申请连接
  //只是申请连接 还没真正接通  相当于打电话拨号 对方不一定接
  Socket s = null;
  try {
   s = new Socket("localhost",9999);
  } catch (UnknownHostException e) {
   System.out.println("找不到主机,连接socket失败");
   e.printStackTrace();
  } catch (IOException e) {
   System.out.println("建立socket连接失败");
   e.printStackTrace();
  }
  
  //二.I/O操作
  //1.建立通道
  try {
   InputStream os = s.getInputStream();
   
   BufferedReader br = new BufferedReader(new InputStreamReader(os));
   
   //2.利用read读
   String message = br.readLine();
   System.out.println("---------client---------");
   System.out.println("服务器对您说:" + message);
   
   
   
   //---------------------一直说-----------------------
   while(!message.equals("88")){
    message = br.readLine();
    System.out.println("---------client---------");
    System.out.println("服务器对您说:" + message);
    
   }
  } catch (IOException e) {
   System.out.println("客户端读取数据失败");
   e.printStackTrace();
  }
  
  //3.关闭通道
  
  
 
  //三.关闭socket连接
  if(s!=null){
   try {
    s.close();
   } catch (IOException e) {
    System.out.println("关闭socket失败");
    e.printStackTrace();
   }
  }
 }
}
第五步:


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerReceiver1 implements Runnable{

 public  void receive(){
  
  //一.建立socket连接
  //1.新建ServerSocket
  ServerSocket ss = null;
  try {
   ss = new ServerSocket(8888);
  } catch (IOException e) {
   System.out.println("重复的端口,请先关闭相应程序,再从新启动");
   e.printStackTrace();
  }
  Socket socket = null;
  try {
   socket = ss.accept();
  } catch (IOException e) {
   
   e.printStackTrace();
  }//阻塞式的 傻傻的等待 等待客户端申请连接
  
  System.out.println("有一个客户端连接");
  
  //二.I/O操作
  //1.建立通道
  try {
   InputStream is = socket.getInputStream();
   
   BufferedReader br = new BufferedReader(new InputStreamReader(is));
   
   //2.利用read读
   String message = br.readLine();
   System.out.println("-------------Server---------");
   System.out.println("客户端对你说:" + message);
   
   while(!message.equals("88")){
    //一直读
    message = br.readLine();
    System.out.println("-------------Server---------");
    System.out.println("客户端对你说:" + message);
   }
  } catch (IOException e) {
   System.out.println("服务器接收数据失败");
   e.printStackTrace();
  }
  
  
  //3.关闭通道
  
  
  
 }

 public void run() {
  receive();
  
 }
}

第六步:


import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class ServerSend2 implements Runnable{

 public  void send(){
  
  //一.建立socket连接
  //1.新建ServerSocket
  ServerSocket ss = null;
  try {
   ss = new ServerSocket(9999);
  } catch (IOException e) {
   System.out.println("重复的端口,请先关闭相应程序,再从新启动服务器");
   e.printStackTrace();
  }
  Socket socket = null;
  try {
   socket = ss.accept();
  } catch (IOException e) {
   System.out.println("建立socket连接失败");
   e.printStackTrace();
  }//阻塞式的 傻傻的等待 等待客户端申请连接
  
  System.out.println("有一个客户端连接");
  
  //二.I/O操作
  //1.建立通道
  OutputStream os = null;
  try {
   os = socket.getOutputStream();
  } catch (IOException e) {
   System.out.println("服务器端建立输出流失败");
   e.printStackTrace();
  }
  
  PrintWriter pw = new PrintWriter(os);
  
  //2.利用write写
  
  System.out.println("-------------Server---------");
  Scanner scanner = new Scanner(System.in);
  System.out.println("请输入您想说的话:");
  String str = scanner.next();
  
  pw.println(str);
  pw.flush();
  
  
  while(!str.equals("88")){
   //一直写
   System.out.println("-------------Server---------");
   System.out.println("请输入您想说的话:");
   str = scanner.next();
   
   pw.println(str);
   pw.flush();
  }
  
  
  //3.关闭通道
  
  
  
 }

 public void run() {
  send();
 }
}

 

 

 

 

 

原创粉丝点击