
Java多人聊天可以使用Java的Socket编程实现,主要的思路是:使用服务器来维护所有客户端的连接,并将客户端之间的聊天信息进行转发。
具体的实现步骤如下:
创建服务器端:使用ServerSocket类创建一个服务器端,并监听指定的端口,等待客户端的连接。
创建客户端:使用Socket类创建一个客户端,并连接到服务器端。
实现聊天功能:客户端和服务器端之间可以通过输入和输出流进行通信,客户端将聊天信息发送给服务器,服务器再将其转发给其他客户端。
处理异常:在实现聊天功能时,需要注意处理可能出现的异常,例如连接异常、输入输出异常等等。
一个简单的Java多人聊天程序的代码框架如下:
服务器端:
import javaioIOException;
import javanetServerSocket;
import javanetSocket;
import javautilArrayList;
public class ChatServer {
private ServerSocket serverSocket;
private ArrayList<ClientHandler> clients;
public ChatServer(int port) throws IOException {
serverSocket = new ServerSocket(port);
clients = new ArrayList<ClientHandler>();
Systemoutprintln("服务器已启动,等待客户端连接");
}
public void start() throws IOException {
while (true) {
Socket socket = serverSocketaccept();
ClientHandler client = new ClientHandler(socket, this);
clientsadd(client);
clientstart();
}
}
public void broadcast(String message) {
for (ClientHandler client : clients) {
clientsendMessage(message);
}
}
public void removeClient(ClientHandler client) {
clientsremove(client);
}
public static void main(String[] args) throws IOException {
ChatServer server = new ChatServer(12345);
serverstart();
}
}
客户端:
import javaioBufferedReader;
import javaioIOException;
import javaioInputStreamReader;
import javaioPrintWriter;
import javanetSocket;
public class ChatClient {
private Socket socket;
private BufferedReader reader;
private PrintWriter writer;
private String name;
public ChatClient(String serverAddress, int port, String name) throws IOException {
socket = new Socket(serverAddress, port);
reader = new BufferedReader(new InputStreamReader(socketgetInputStream()));
writer = new PrintWriter(socketgetOutputStream(), true);
thisname = name;
}
public void start() throws IOException {
Systemoutprintln("欢迎来到聊天室!");
new Thread(new IncomingMessageHandler())start();
new Thread(new OutgoingMessageHandler())start();
}
private class IncomingMessageHandler implements Runnable {
@Override
public void run() {
try {
while (true) {
String message = readerreadLine();
if (message == null) {
break;
}
Systemoutprintln(message);
}
} catch (IOException e) {
eprintStackTrace();
} finally {
close();
}
}
}
private class OutgoingMessageHandler implements Runnable {
@Override
public void run() {
BufferedReader reader = new BufferedReader(new InputStreamReader(Systemin));
try {
while (true) {
String message = readerreadLine();
if (messageequals("quit")) {
break;
}
writerprintln(name + ": " + message);
}
} catch (IOException e) {
eprintStackTrace;
} finally {
close();
}
}
}
1在电脑上安装中间件(tomcat。weblogic。。。。等)发布并启动服务。设置好端口 比如 802在电脑上安装花生壳软件。在软件里申请域名映射到本机。
3访问花生壳域名即可先安装JDK,要配置环境变量。安装完JDK后配置环境变量 计算机→属性→高级系统设置→高级→环境变量。
JDK下载地址:>除非你想把你的电脑搭建成高访问流量的服务器
不然用一般的电脑就可以了 可以运行eclipse,tomcat oracle就行了 别的没有要求 内存最好高点 2个G应该可以!
帮你查了下IBMR52配置。。
CPU类型:迅驰二代
CPU频率:173GHz 支持SPEED STEP 支持
内存:DDR2 2G
硬盘容量:120GB
光驱类型:康宝(DVD-CO)
显示屏尺寸:141英寸
显示屏分辨率:1024768
显示芯片:INTEL 915
显存容量:128MB
网卡:千兆网卡 +54M无线网卡
PCMCIA槽数:2个(一个一代、一个二代)
指取设备:IBM ThinkPad UltraNav
I/O接口:麦克风插孔、耳机插孔、MODEM插孔、网卡接口,视频输出接口,两个USB接口打印机接口
随机附件:A/C适配器
*** 作系统:Windows XP
附带软件:常用软件
太行了!显卡稍微差点 不过一点影响没有!
加油学吧!因为阿里云服务器事先就安装好了ssh,我们可以用xshell连上去,我把下载好的targz上传到/opt/目录,用命令 tar -zxvf jdk-8u74-linux-x64targz
剩下的就是配置环境变量了。
然后我就在命令行输入 #java -version 发现并没有出现java的版本信息(有些好像不用安装好没配置环境变量就能出来,我这里好像不行)
于是我开始配置环境变量vi /etc/profile 加入如下配置
JAVA_HOME=/opt/jdk180_74
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=:$JAVA_HOME/lib/dtjar:$JAVA_HOME/lib/toolsjar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
然后是配置文件立即生效:[root@localhost ~]# source /etc/profile //使修改立即生效
再输入java -version就有你安装的版本信息了将网站COPY到TOMCAT
这个回答一看就知道不专业了
起码说下,把上关的WAR包,放到里面
然后到CONF目录改端口啥的,能多说就多说
再说了可以反问面试官,是否只需要局域网
还有用不用做域名配置,如果需要的话,装个阿帕奇服务器等等
另外他问的是WEB服务器,还专门指定WINDOWS SERVER版
那很有可能是想问你 *** 作系统的相关东东,例如IIS什么的
如果单单TOMCAT的话, 啥系统都可以搭建、需要解决中央控制端到各节点服务器之间的通信。
这个其实牵扯到一个通信协议的问题,各语言都有自己的socket,thread的库,直接调用即可。但是这个通信协议就需要自己来完成了。既不能太简单,太简单了,明码传输,如果别人获知了这个接口,就很容易执行一些令人讨厌的 *** 作。也不能太复杂,太复杂了等于是给自己找麻烦,所以简单的数据包编解码的工作或者用token验证的方式是需要的。通信协议起码要两种,一种是传输命令执行的协议,一种是传输文件的协议。
二、跨语言的socket通信
为什么要跨语言,主控端和代理端通信,用什么语言开发其实无所谓。但是为了给自己省事,尽可能使用服务器上已经有了的默认语言,Ambari前期采用php+puppet的方式管理集群,这不是不可以,puppet自己解决了socket通信协议和文件传输的问题,可你需要为了puppet在每台服务器上都安装ruby。我是个有点服务器和代码洁癖的人。光是为了一个puppet就装个ruby,我觉得心里特对不起服务器的资源。所以我自己写了一个python的代理端。python是不管哪个linux系统在安装的时候就都会有了。然后主控端的通信,可以用python实现,也可以用php实现,但是考虑到对于更多的使用者来说,改php可能要比改tornado简单许多,所以就没用python开发。hadoop分支版本众多,发布出去,用户要自己修改成安装适合自己的hadoop发行版,就势必要改源码,会php的明显比会python的多。php里面的model封装了所有的 *** 作,而python只是个 *** 作代理人的角色而已。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)