标签:java中的即时对聊
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中的即时对聊
原文地址:http://zhangzhipeng.blog.51cto.com/9115459/1573880