首页 > 代码库 > java中socket创建服务端与客户端即时对聊

java中socket创建服务端与客户端即时对聊

package tool;

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;
import java.net.UnknownHostException;
import java.util.Scanner;

/**
 * 服务器
 * @author Mr.Zhang
 * 服务端与客户端建立连接的过程
 *1.创建服务端对象,然后指定要监听的端口
 *2.服务端监听向指定端口发出的请求
 *3.客户端发送请求
 *4.服务端接收到请求并建立连接
 *5.服务端关闭连接
 */
public class ServerDemo {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		serverSocket();//服务器开,注释client
		//client();//客户端开,注释serverSocket
	}

	/**
	 * 服务器端
	 * @throws IOException
	 */
	public static void serverSocket() throws IOException{
		System.out.println("服务器端就绪");
		ServerSocket server=new ServerSocket(9999);
		//服务端监听请求
		while(true){
			Socket socket=server.accept();
			System.out.println("服务器获得连接");
			/**
			 * 1.服务端发出欢迎信息
			 */
			//通过socket获得流
			OutputStream os=socket.getOutputStream();
			PrintWriter pw=new PrintWriter(os);
			pw.println("服务器端发送:欢迎您!");
			pw.flush();
			
			/**
			 * 使用BufferedReader接收客户端信息
			 */
			InputStream is=socket.getInputStream();
			BufferedReader br=new BufferedReader(new InputStreamReader(is));
			String msg=new String();
			/**
			 * 什么是阻塞?
			 * 阻塞就是由于流中的数据没有满足获取的条件,输入流就会一直等待接收满足条件的数据,由此造成了程序等待,就是阻塞
			 * 解决方法:1. IO:让读取的数据满足读取条件   2.NIO
			 */
			while((msg=br.readLine())!=null){
				if(msg.equalsIgnoreCase("quit")){//断开服务器端连接
					socket.close();
					break;
				}
				if(msg.equalsIgnoreCase("quitall")){//断开服务器端与客户端连接
					socket.close();
					server.close();
					break;
				}
				
				System.out.println("客户端发出的数据是"+msg);
				/**
				 * 服务端发出确认信息
				 */
				Scanner scan=new Scanner(System.in);
				String sendMsg=scan.next();
				pw.println(sendMsg);
				pw.flush();
			}
		}
		
	}
	
	/**
	 * 客户端
	 * @throws IOException 
	 * @throws UnknownHostException 
	 */
	public static void client() throws UnknownHostException, IOException{
		//使用Socket向指定的机器和端口发出请求
		Socket socket=new Socket("192.168.1.101",9999);
		/**
		 * 2.客户端接收服务端发出的欢迎您信息,并发送数据
		 */
		//通过socket获得输入流
		InputStream is=socket.getInputStream();
		BufferedReader br=new BufferedReader(new InputStreamReader(is));
		//持续接收服务器端信息
		String content=new String();
		while((content=br.readLine())!=null){
			System.out.println("服务端发送的数据"+content);
			Scanner scan=new Scanner(System.in);
			String sendMsg=scan.next();
			PrintWriter pw=new PrintWriter(socket.getOutputStream());
			pw.println(sendMsg);
			pw.flush();
		}
	}
}


本文出自 “Mr.Zhang” 博客,请务必保留此出处http://zhangzhipeng.blog.51cto.com/9115459/1573880

java中socket创建服务端与客户端即时对聊