简单聊天室实现分析--信息传输代码分析
3.服务器发送信息给客户和客户发送信息给服务器相应代码的区别:
1) 服务器发送给客户(给定的字符串发送给客户):
java.io.OutputStream outPut = socket.getOutputStream(); //创建要发送的字符串 String str = "你好,欢迎进我的服务器!\r\n"; //把字符串转变成为字节数组 //因为在网络上,是以字节传输的 byte[] strs = str.getBytes(); //输出字符 outPut.write(strs); outPut.flush();
//针对套接字创建输出流对象java.io.OutputStream outPut = socket.getOutputStream();System.out.println("输入你要发送的文字:");//读取我们要从服务器敲入的数据,同时放入缓存中BufferedReader read = new BufferedReader(new InputStreamReader(System.in));//读取缓存中的数据,转化为字符串String word=String.valueOf(read.readLine());//给字符串加上换行符word="服务器说:"+word+"\r\n";//把字符串拆为字节放入字节数组中byte[] bytes=word.getBytes();//输出字节数组中的字节到客户机,客户机读取字节outPut.write(bytes);//强制输出outPut.flush();
/**下面的所有代码为从客户机读取字符*///从输入输出流套接字中获得输入输出流java.io.InputStream inPut = socket.getInputStream();//从输入流中读取字节int in=inPut.read();//创建一个缓冲区 StringBuffer sb = new StringBuffer();//判断所获取的是否会回车符或者窗口是否关闭,-1代表关闭窗口,13为回车符 while(in!=-1&&in!=13){//如果不是,则把获取的字节转化为字符添加到缓冲区中sb.append((char)in); //从输入流中读取一个字节in=inPut.read();}//把缓冲区的内容转化为字符串,trim为去掉字符串的尾空格号String string="客户机说:"+sb.toString().trim();//判断字符串是否为bye,如果是的就关闭服务器,退出,如果不是则进行循环内部程序while(!string.equals("客户机说:bye")){ //打印从输入流缓冲区中的字符串 System.out.println(string);//再重新读取内容 in=inPut.read();//创建一个缓冲区StringBuffer sb = new StringBuffer();//判断所获取的是否会回车符或者窗口是否关闭,-1代表关闭窗口,13为回车符 while(in!=-1&&in!=13){ //如果不是,则把获取的字节转化为字符添加到缓冲区中 sb.append((char)in); //从输入流中读取一个字节 in=inPut.read();}//把缓冲区的内容转化为字符串string="客户机说:"+sb.toString().trim();}socket.close();