package chat; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; /** * 聊天室的客户端 * @author adminitartor * */ public class Client { /* * 套接字 * 底层封装这TCP协议,使用其进行网络通讯 */ private Socket socket; /** * 构造方法,用来初始化客户端 * @throws Exception */ public Client() throws Exception{ try { /* * 实例化Socket时需要传入两个参数 * 参数1:服务端的ip地址 * 参数2:服务端的端口号 * 通过IP可以连接到服务端计算机,通过 * 端口连接到运行在服务端计算机上的 * 服务端应用程序。 * 创建Socket的过程就是连接的过程,所以 * 若服务端没有响应,这里会抛出异常 */ System.out.println("正在连接服务端..."); socket = new Socket( "localhost",8088 ); System.out.println("已连接服务端!"); } catch (Exception e) { System.out.println("客户端初始化失败!"); throw e; } } /** * 启动客户端的方法 */ public void start(){ try { Scanner scanner = new Scanner(System.in); //先要求用户输入一个昵称 String nickName = null; while(true){ System.out.println("请输入昵称:"); nickName = scanner.nextLine(); if(nickName.length()>0){ break; } System.out.println("至少输入一个字符."); } /* * 若想向服务端发送信息,需要通过socket * 获取输出流,通过该流写出的数据就会通过 * 网络发送至服务端了。 */ OutputStream out = socket.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(out,"UTF-8"); PrintWriter pw = new PrintWriter(osw,true); //首先将昵称发送给服务端 pw.println(nickName); System.out.println("欢迎你:"+nickName+"!开始聊天吧!"); //首先启动接受服务端消息的线程 ServerHandler handler = new ServerHandler(); Thread t = new Thread(handler); t.start(); while(true){ String message = scanner.nextLine(); pw.println(message); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { try { Client client = new Client(); client.start(); } catch (Exception e) { e.printStackTrace(); } } /** * 该线程用来接收并处理服务端发送过来的消息 * @author adminitartor * */ private class ServerHandler implements Runnable{ public void run(){ try { BufferedReader br = new BufferedReader( new InputStreamReader( socket.getInputStream(),"UTF-8" ) ); String message = null; while((message = br.readLine())!=null){ System.out.println(message); } } catch (Exception e) { // TODO: handle exception } } } }
聊天室的客户端Client
猜你喜欢
转载自luckybrown.iteye.com/blog/2330876
今日推荐
周排行