`
zuozhimin
  • 浏览: 5650 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

简单聊天室实现分析--信息传输代码分析

阅读更多
3. 服务器发送信息给客户和客户发送信息给服务器相应代码的区别:
1) 服务器发送给客户(给定的字符串发送给客户):
java.io.OutputStream outPut = socket.getOutputStream();
		 //创建要发送的字符串
		 String str = "你好,欢迎进我的服务器!\r\n";
		 //把字符串转变成为字节数组
		 //因为在网络上,是以字节传输的
		 byte[] strs = str.getBytes();
		 //输出字符
		 outPut.write(strs);
		 outPut.flush();


2)服务器发送给客户(我们输入的字符串发送给客户):
//针对套接字创建输出流对象
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();


  3)读取客户发送给服务器的信息:
 /**下面的所有代码为从客户机读取字符*/
//从输入输出流套接字中获得输入输出流
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();


    我们一定要注意,在客户发送信息,服务器读取的时候,inPut.read()读取的是字节,而不是字符,所以我们在加入缓存(StringBuffer)的时候一定要先强行转换,把字节转换为字符,在加入(append())到缓存中;如果是服务器发送信息的话,注意在数据流中数据是以字节的形式传输的,所以一定要先转化为字节(getByte()方法)后再传输(outs.write());
    上面我们还要注意StringBuffer和BufferedReader的区别,还有一个BufferedReader: 
     StringBuffer是我们在客户输入字符的时候,把我们输入的字符存入StringBuffer缓存中,主要是以字符存储来实现缓存,当遇到某个我们设定的字符(我们这里设定的是回车符)时候就尽心输出字符串;
     BufferedReader是从输入流中读取文本,缓冲各个字符,从而实现高效读取,我们这是用在服务器发送信息给客户上;创建对象时一定要传入输入流对象;获取它的字符串的方法是它对应的readLine()方法,要能输出的话还要在后面再加个toString()方法;注意它的readLine()方法,会阻塞,直到客户端发送了一个回车符后,才将读取的字符串返回,如果在服务器端使用readLine()方法,无论客户机输入了多少字符串,如果没有回车符出现,这个方法就无法执行完毕,从而返回一个字符串,虽然这些字符串都 已经读入了内存;
    BufferedWriter将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入;这里没有用到;
   
分享到:
评论

相关推荐

    c++通信/数据库/文件基础知识一百例

    实例01-简单网络聊天室 实例02-网络聊天室服务器 实例03-网络聊天室客户端 实例04-定时发送消息 实例05-传输文件 实例06-GETIP 实例07-域名解析 实例08-TUSPY 实例09-多人聊天室 实例10-端口扫描 实例11-异步网络...

    vc++ 开发实例源码包

    内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的实现,含文档。 ...

    java源码包---java 源码 大量 实例

    java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥  ...

    JAVA上百实例源码以及开源项目源代码

    将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 同上 java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示...

    vc++ 应用源码包_6

    内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的实现,含文档。 ...

    vc++ 应用源码包_5

    内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的实现,含文档。 ...

    JAVA上百实例源码以及开源项目

    java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥  ...

    java源码包2

    java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,...

    vc++ 应用源码包_1

    内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的实现,含文档。 ...

    vc++ 应用源码包_2

    内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的实现,含文档。 ...

    vc++ 应用源码包_3

    内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的实现,含文档。 ...

    网络编程实用教程(第三版).zip

    5.5.3 聊天室服务器端程序的主要实现代码和分析 154 5.5.4 创建聊天室的客户端程序 162 5.5.5 聊天室客户端程序的主要实现代码和分析 163 习题 170 实验 170 第6章 WinInet编程 172 6.1 MFC WinInet类 ...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 同上 java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 同上 java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示...

    java源码包3

    java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,...

    java源码包4

    java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,...

    Visual C++网络通信编程实用案例精选_3

    98 3.4.2 实例实现 101 3.5 获取局域网内其他计算机的信息 103 <br>第4章 IE编程实例 111 4.1 简单的浏览器的实现 111 4.1.1 实现原理 111 4.1.2 实例实现 112 4.2 删除IE相关...

    Visual C++网络通信编程实用案例精选_7

    98 3.4.2 实例实现 101 3.5 获取局域网内其他计算机的信息 103 <br>第4章 IE编程实例 111 4.1 简单的浏览器的实现 111 4.1.1 实现原理 111 4.1.2 实例实现 112 4.2 删除IE相关...

    Visual C++网络通信编程实用案例精选_9(全)

    98 3.4.2 实例实现 101 3.5 获取局域网内其他计算机的信息 103 <br>第4章 IE编程实例 111 4.1 简单的浏览器的实现 111 4.1.1 实现原理 111 4.1.2 实例实现 112 4.2 删除IE相关...

Global site tag (gtag.js) - Google Analytics