关于用java多线程做的一个多人聊天小程序的一个问题——如何实现进程间的通信? 100
现在已经可以实现单用户与服务器的对话,为了多用户可以连接,在服务器端改用多线程:try{//建立连接serverSocket=newServerSocket(port);...
现在已经可以实现单用户与服务器的对话,为了多用户可以连接,在服务器端改用多线程:
try {
// 建立连接
serverSocket = new ServerSocket(port);
socket = serverSocket.accept();
System.out.println("新用户连接");
new LogicThread(socket);
} catch (Exception e) {
e.printStackTrace();
}
------------------------------------------------------------------------
//以下为LogicThread类中关键内容
is = socket.getInputStream();
os = socket.getOutputStream();
GUI.qd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("ok");
String s = GUI.inp.getText();
try {
System.out.println(s);
GUI.output += "你:" + s + '\n';
GUI.out.setText(GUI.output);
os.write(s.getBytes());
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
while (true) {
byte[] b = new byte[1024];
// 接收客户端发送内容
int n = is.read(b);
String s = new String(b, 0, n);
// 输出
System.out.println("客户端发送内容为:" + new String(b, 0, n));
GUI.output += "对方:" + s + '\n';
GUI.out.setText(GUI.output);
// is = socket.getInputStream();
}
请问在此基础上如何修改,可以实现多人聊天?(即类似于群的功能) 展开
try {
// 建立连接
serverSocket = new ServerSocket(port);
socket = serverSocket.accept();
System.out.println("新用户连接");
new LogicThread(socket);
} catch (Exception e) {
e.printStackTrace();
}
------------------------------------------------------------------------
//以下为LogicThread类中关键内容
is = socket.getInputStream();
os = socket.getOutputStream();
GUI.qd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("ok");
String s = GUI.inp.getText();
try {
System.out.println(s);
GUI.output += "你:" + s + '\n';
GUI.out.setText(GUI.output);
os.write(s.getBytes());
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
while (true) {
byte[] b = new byte[1024];
// 接收客户端发送内容
int n = is.read(b);
String s = new String(b, 0, n);
// 输出
System.out.println("客户端发送内容为:" + new String(b, 0, n));
GUI.output += "对方:" + s + '\n';
GUI.out.setText(GUI.output);
// is = socket.getInputStream();
}
请问在此基础上如何修改,可以实现多人聊天?(即类似于群的功能) 展开
1个回答
展开全部
传统的进程间通信的方式有大致如下几种:
(1) 管道(PIPE)
(2) 命名管道(FIFO)
(3) 信号量(Semphore)
(4) 消息队列(MessageQueue)
(5) 共享内存(SharedMemory)
(6) Socket
Java如何支持进程间通信。我们把Java进程理解为JVM进程。很明显,传统的这些大部分技术是无法被我们的应用程序利用了(这些进程间通信都是靠系统调用来实现的)。但是Java也有很多方法可以进行进程间通信的。
除了上面提到的Socket之外,当然首选的IPC可以使用Rmi,或者Corba也可以。另外Java nio的MappedByteBuffer也可以通过内存映射文件来实现进程间通信(共享内存)。
(1) 管道(PIPE)
(2) 命名管道(FIFO)
(3) 信号量(Semphore)
(4) 消息队列(MessageQueue)
(5) 共享内存(SharedMemory)
(6) Socket
Java如何支持进程间通信。我们把Java进程理解为JVM进程。很明显,传统的这些大部分技术是无法被我们的应用程序利用了(这些进程间通信都是靠系统调用来实现的)。但是Java也有很多方法可以进行进程间通信的。
除了上面提到的Socket之外,当然首选的IPC可以使用Rmi,或者Corba也可以。另外Java nio的MappedByteBuffer也可以通过内存映射文件来实现进程间通信(共享内存)。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询