码迷,mamicode.com
首页 > 其他好文 > 详细

Socket编程简单实现局域网多人互聊

时间:2015-08-21 00:18:42      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:java   socket   

                首先  我们要确认的是在同一个局域网,客户端使用的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();
				}
			}
		}

	}

}



版权声明:本文为博主原创文章,未经博主允许不得转载。

Socket编程简单实现局域网多人互聊

标签:java   socket   

原文地址:http://blog.csdn.net/bluezhangfun/article/details/47817091

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!