java 类似QQ的本地聊天室程序实现(上)(客户端程序)
2016-05-10 19:46
716 查看
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; 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 soft01 * */ public class Client { /*java.net.Soecket * 套接字 封装了TCP协议的通讯 * 使用Socket可以链接服务器,链接后可以创建 * 一个输入流和一个输出流,使用输出流将数据发送至服务器,通过输入流用于读取服务器段发送过来的数据 * 从而实现与服务端的通讯 * */ private Socket socket; /* * 构造方法 用来初始化客户端 */ public Client() throws Exception{ /* * 初始化Socket就是链接远端计算机的过程 * 参数1:远端计算机地址 * 参数2:远端计算机端口 * 通过地址可以找到网络上的服务器端计算机 * 通过端口可以找到计算机上运行的服务端应用程序 从而建立链接 * 若链接成功 构造方法返回Socket实例 若失败会抛出异常 */ socket=new Socket("172.20.9.234",8088); } /* * 启动方法 用来执行客户端业务逻辑 */ public void start() throws IOException{ //System.out.println("你好请输入:"); Scanner scan=new Scanner(System.in); //启动与读取服务端发送的消息的线程 ServerHander handler=new ServerHander(); Thread t=new Thread(handler); t.start(); /* * outputstream getoutputstream() * scoket提供的该方法是用来获取一个输出流, * 通过该输出流写出的数据会被发送至远端计算机(对客户端而言远端计算机就是服务端) */ OutputStream out=socket.getOutputStream(); OutputStreamWriter osw=new OutputStreamWriter(out,"UTF-8"); /*使得输出数据按行输出 *参数true 表明是:自动刷新答应 */ while(true){ String str=scan.nextLine(); PrintWriter pw=new PrintWriter(osw,true); /*光写PW.Print是不行的,因为写的东西根本就填补满缓冲区,这样就导致发不出去 * 所以我们.flush来刷新一下,我们可以用自动行刷新:println */ pw.println(str); } } public static void main(String[] args) { try{ Client client=new Client(); client.start(); }catch(Exception e){ e.printStackTrace(); } } /* * 该线程负责一直读取服务端发送过来的消息 * 并输出到控制台显示给用户 */ private class ServerHander implements Runnable{ @Override public void run() { try{ InputStream in=socket.getInputStream(); InputStreamReader isr=new InputStreamReader(in); BufferedReader br=new BufferedReader(isr); String message=null; while((message=br.readLine())!=null){ System.out.println(message); } }catch(Exception e){ } } } }
相关文章推荐
- JAVA_SE使用反射机制new实例简例
- [Java视频笔记]day21
- java学习第一节
- 如何在windows安装Eclipse
- JDBC / Spring / MyBatis 性能比较
- 让Myeclipse10支持Mac OSX – Retina显示屏
- spring-data-solr:第一步.基本po类与schema.xml文件的对应
- 设置eclipse默认用户名
- java线程状态图;
- Java--类的继承--回合制对战游戏
- java中如何自定义线程
- java中static{}语句块详解
- Table of Contents - Spring
- java生成pdf文件的完善
- java中BeanWriter类
- java中进程和线程的区别
- JavaSE
- 系统里有Courier New字体 Eclipse没有这个字体选项
- Java学习笔记(七):内部类、静态类和泛型
- java反射机制-工厂设计模式