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将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入;这里没有用到;
分享到:
相关推荐
通过学习和分析这个"简单聊天室"的源代码,我们可以掌握网络编程基础,理解客户端-服务器架构,以及如何实现一个实时通信系统。这将为更复杂的应用如即时通讯软件(IM)、多人在线游戏等奠定坚实的基础。 文件名称...
【标题】:“C++开发的简易聊天室的源代码文件”揭示了使用C++编程语言构建的一个基础级网络通信应用,即一个简单的聊天室。在这个项目中,开发者旨在实现两个核心功能:远程控制电脑的开关机以及双向通信。C++是一...
在本篇《ActiveMQ实战——实现一个简易版的聊天室》中,我们将深入探讨如何利用Apache ActiveMQ构建一个简单的在线聊天应用。ActiveMQ是Apache软件基金会的一个开源项目,它是一款功能强大的消息中间件,用于在...
在本项目中,我们关注的是一个基于Java实现的聊天室应用——"聊天室-java-可直接运行"。这个项目提供了一个可以直接运行的聊天室程序,它可能是为了教学、实验或者快速搭建一个简单的在线交流平台而设计的。让我们...
【TCP/IP实现 简易聊天室 C++】 在计算机网络中,TCP/IP协议族是互联网通信的基础。这个简易聊天室项目就是基于TCP/IP协议,使用C++编程语言实现的,旨在展示如何创建一个基本的客户端-服务器通信系统。在这个系统...
3. 安全性:尽管这是个简易聊天室,但考虑到实际应用,应避免使用明文传输敏感信息,可以考虑使用加密技术。 在实际开发过程中,可以使用像Wireshark这样的网络分析工具来调试网络通信过程,查看数据包的传输情况,...
【标题】:“基于TCP的简单聊天室代码” TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在构建一个简单的聊天室时,TCP是常用的选择,因为它能保证数据的有序性和...
【jsp聊天室-源代码发布】是一个非常适合初级程序员学习和参考的项目,它提供了一个基于JSP技术构建的在线聊天室的完整源代码。通过分析和理解这个项目,初学者可以深入理解JSP(JavaServer Pages)技术在实际应用中...
在本文中,我们将深入探讨如何使用Qt框架,特别是QSocket类,来实现一个简单的跨IP聊天室。Qt是一个流行的C++库,它提供了丰富的功能,包括GUI设计、网络编程等,而QSocket是Qt用于网络通信的核心类,支持TCP/IP协议...
Java简单聊天室源代码是一种基于Java编程语言实现的多用户实时通信系统,它允许多个用户在同一平台上进行实时的文本交流。这个项目对于初学者来说是一个很好的实践机会,可以帮助他们理解和应用Java网络编程、多线程...
【标题】"简单聊天室实现"揭示了一个编程项目,它基于Beetle库构建了一个基本的聊天室应用程序。Beetle通常是一个用C#编写的高性能Socket TCP组件,旨在简化网络通信,特别是对于实时和高吞吐量的应用场景。在这个...
通过分析和实现这样的聊天室项目,学生可以深入理解网络编程的原理,掌握多线程的使用,提升问题解决能力,并且熟悉Java GUI开发。这不仅锻炼了编程技能,也为将来开发更复杂的分布式系统奠定了基础。
【简易聊天室C#源程序】是一个用于学习和理解C#编程语言中网络通信和多线程技术的应用实例。这个项目旨在帮助开发者掌握如何构建一个基础的在线聊天平台,允许用户进行实时交流。通过分析和研究这个源代码,我们可以...
文件"code"可能包含了实现这个聊天室的源代码,通过阅读和分析这些代码,可以更深入地理解上述知识点的具体应用。同时,调试和优化代码的过程也是提升技能的好机会,比如优化性能、增强安全性、处理异常情况等。 ...
《.Net 3.5+LINQ+AJAX构建JChat简易聊天室源码解析》 在当今互联网时代,实时通信技术已经成为了不可或缺的一部分。基于.Net 3.5框架、结合LINQ(Language Integrated Query)查询语言和AJAX(Asynchronous ...
【JAVA聊天室小代码】是基于Java编程语言实现的一个简易聊天室项目,它提供了一个基本的平台,使得用户可以通过网络进行实时的文本交流。在Java编程中,实现这样的功能涉及到了许多关键知识点,包括网络编程、多线程...
【标题】"简单聊天室(C#编写)"是一个基于C#编程语言实现的简易聊天应用程序,主要涉及了网络通信和多线程技术。该程序利用.NET框架提供的类库,特别是Socket类来实现客户端与服务器端之间的数据传输,创建了一个基本...
【聊天室源代码】是一个关于构建简单聊天程序的开源项目,描述中提到它存在一些错误,需要用户自行发现并修复。这个项目对于学习基础的网络编程、多线程通信以及客户端-服务器架构的实践有着很好的参考价值。我们将...
总结,这个Java聊天室程序不仅需要实现基本的聊天功能,还涉及到用户身份验证、数据安全传输、多线程处理和数据库操作等复杂技术。项目的实施将锻炼团队在软件工程中的协作、设计和实现能力,同时提供一个实用的在线...
【简单聊天室】是一个基础的网络通信应用,它实现了客户端与服务端的实时通信功能,让用户可以进行多人在线聊天。这个项目主要运用了TCP/IP协议,确保数据在互联网中的可靠传输。下面将详细阐述该聊天室的核心知识点...