java 类似QQ的本地聊天室程序实现(上)(客户端程序)

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){
				
			}
		}
		
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值