您的位置:首页 > 编程语言 > Java开发

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

}
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: