首先 我们要确认的是在同一个局域网,客户端使用的IP地址是Server的IP地址和Server的端口。这样接下来我们就能实现简单的互聊。
package com.blueZhang; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; public class Demo6 { public static void main(String[] args) { ArrayList<Socket> list = new ArrayList<Socket>();//用于存储客户端的Socket的信息的 try { ServerSocket ss = new ServerSocket(9999);//创建服务器对象 System.out.println("服务器启动"); while (true) {//循环接收 如果有客户端那么久接收并创建客户端的对象 Socket s = ss.accept();//创建客户端的对象 System.out.println(s.getInetAddress().getHostAddress() + "已连接");//输出某某某已经连接 list.add(s);//添加到list中 new Thread(new MyThread12(s, list)).start();//启动服务器端的线程 } } catch (IOException e) { e.printStackTrace(); } } } class Demo6Thread implements Runnable { private ArrayList<Socket> list = new ArrayList<Socket>();//存储客户端的Socket对象 private Socket s; public Demo6Thread(Socket s, ArrayList<Socket> list) {//使用构造函数初始化 this.s = s;//初始化 this.list = list; } @Override public void run() { try { InputStream is = s.getInputStream();//使用InputStream获取S中的信息 BufferedReader br = new BufferedReader(new InputStreamReader(//创建br 用于接收客户端的信息 is)); String a = "";//中间变量 while (true) { a = br.readLine();//获取输入流中的信息 String line = s.getInetAddress().getHostAddress() + "说:" + a;//组合字符串 System.out.println(line);//打印说话的内容 for (int i = 0; i < list.size(); i++) {//遍历集合 Socket si = list.get(i);//获取集合中的Socket PrintWriter pw = new PrintWriter(si.getOutputStream(), true);//获取其中的输出流 pw.println(line);//放入输入流 pw.flush();//刷新缓冲区 } } } catch (IOException e) { e.printStackTrace(); } finally { if (s != null) { try { s.close();//关闭流操作 } catch (IOException e) { e.printStackTrace(); } } } } }
package com.blueZhang; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; public class Demo6 { public static void main(String[] args) { ArrayList<Socket> list = new ArrayList<Socket>();//用于存储客户端的Socket的信息的 try { ServerSocket ss = new ServerSocket(9999);//创建服务器对象 System.out.println("服务器启动"); while (true) {//循环接收 如果有客户端那么久接收并创建客户端的对象 Socket s = ss.accept();//创建客户端的对象 System.out.println(s.getInetAddress().getHostAddress() + "已连接");//输出某某某已经连接 list.add(s);//添加到list中 new Thread(new MyThread12(s, list)).start();//启动服务器端的线程 } } catch (IOException e) { e.printStackTrace(); } } } class Demo6Thread implements Runnable { private ArrayList<Socket> list = new ArrayList<Socket>();//存储客户端的Socket对象 private Socket s; public Demo6Thread(Socket s, ArrayList<Socket> list) {//使用构造函数初始化 this.s = s;//初始化 this.list = list; } @Override public void run() { try { InputStream is = s.getInputStream();//使用InputStream获取S中的信息 BufferedReader br = new BufferedReader(new InputStreamReader(//创建br 用于接收客户端的信息 is)); String a = "";//中间变量 while (true) { a = br.readLine();//获取输入流中的信息 String line = s.getInetAddress().getHostAddress() + "说:" + a;//组合字符串 System.out.println(line);//打印说话的内容 for (int i = 0; i < list.size(); i++) {//遍历集合 Socket si = list.get(i);//获取集合中的Socket PrintWriter pw = new PrintWriter(si.getOutputStream(), true);//获取其中的输出流 pw.println(line);//放入输入流 pw.flush();//刷新缓冲区 } } } catch (IOException e) { e.printStackTrace(); } finally { if (s != null) { try { s.close();//关闭流操作 } catch (IOException e) { e.printStackTrace(); } } } } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/bluezhangfun/article/details/47817091