对话I/O—网络聊天室
今天看了一个马化腾的视频,二十年前,老马正在做QICQ的时候,人们通过互联网通信还是一个难以想象的概念。如今我们已经习惯了用聊天工具聊天,而聊天工具它原始的模样是什么?小翔哥将带你实现利用Java语言实现一个网络聊天室。
客户端
import java.net.*; import java.io.*; public class T1_Client{ public static void main(String [] args){ try{ //使用Socket向指定IP的服务器中指定端口的服务端程序发送连接请求 Socket socket = new Socket("10.200.65.65", 5000); //输出服务端信息:地址、端口 System.out.println("Connected with server "+socket.getInetAddress()+":"+socket.getPort()); //创建键盘输入流,并包装为BufferedReader方便处理文本(也可用Scanner) BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); System.out.println(input); //获取网络连接输出流,并包装为PrintWriter方便输出(参数true,实时输出) PrintWriter output = new PrintWriter(socket.getOutputStream(), true); while(true){ String lineToBeSent = input.readLine(); //如果用户输入"end",终止循环 if(lineToBeSent.equals("end")){ break; }else{ output.println(lineToBeSent); } } //通讯结束,关闭连接及相关资源 input.close(); output.close(); socket.close(); }catch(Exception ex){ ex.printStackTrace(); } } }
服务端
import java.net.*; import java.io.*; public class T1_Server{ public static void main(String [] args){ ServerSocket server_socket = null; try{ //使用ServerSocket监听本机指定的端口(端口可在1024~65535中随意指定) server_socket = new ServerSocket(5000); //服务端不断处理客户端的连接 while(true){ System.out.println("ready for connection..."); //阻塞,等待连接,成功连接后,创建与客户端通讯的Socket对象实例 Socket socket = server_socket.accept(); //一条线程对应一个客户端 T1_Server_Thread thread = new T1_Server_Thread(socket); thread.start(); } }catch(Exception ex){ ex.printStackTrace(); }finally{ try{ if(server_socket!=null){ server_socket.close(); } }catch(Exception ex){ ex.printStackTrace(); } } } } class T1_Server_Thread extends Thread{ private Socket socket; public T1_Server_Thread(Socket s){ this.socket = s; } public void run(){ try{ //输出客户端信息:地址、端口 System.out.println("New connection accepted "+socket.getInetAddress()+":"+socket.getPort()); //获取网络连接输入流,并包装为BufferedReader方便处理文本 BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); while(true){ String message = input.readLine(); if(message == null){ break; }else{ System.out.println(message); } } //通讯结束,关闭连接及相关资源 input.close(); socket.close(); System.out.println("Connection closed by client"); }catch(Exception ex){ ex.printStackTrace(); } } }