怎么实现java一对一聊天室?可以介绍一下吗

Python0486

怎么实现java一对一聊天室?可以介绍一下吗,第1张

要实现 Java 的一对一聊天室,可以使用 Socket 编程实现基于 TCP 协议的通信。

以下是一些大致的步骤:

创建服务器端程序:创建一个服务器端程序,等待客户端的连接请求。在连接请求到来时,服务器会创建一个新的线程来处理这个连接请求。

创建客户端程序:创建一个客户端程序,连接服务器端程序。在连接成功后,客户端可以发送消息给服务器,服务器会将这些消息转发给接收方。

实现消息传输:在客户端和服务器之间,通过输入流和输出流传输数据。客户端向服务器发送消息时,使用输出流将消息发送给服务器;服务器收到消息后,使用输入流读取消息内容。

实现一对一通信:当客户端和服务器建立连接后,可以通过指定接收方的用户名来实现一对一通信。客户端向服务器发送消息时,需要指定接收方的用户名,服务器将根据用户名查找对应的客户端,并将消息发送给指定的客户端。

实现界面交互:可以使用 JavaFX、Swing 等图形界面库,实现聊天窗口的显示和用户的输入。用户在聊天窗口中输入消息后,客户端将消息发送给服务器,服务器将消息转发给接收方。

需要注意的是,为了保证通信的可靠性和安全性,需要对数据进行加密和校验,同时也需要考虑并发访问的问题,防止多个线程同时访问导致数据错乱的情况发生。

两个类,实现交互

import java.io.BufferedReader

import java.io.BufferedWriter

import java.io.InputStreamReader

import java.io.OutputStreamWriter

import java.io.PrintWriter

import java.net.ServerSocket

import java.net.Socket

public class MutiChat

{

public static void main(String[] args)

{

MutiChat mc = new MutiChat()

mc.receive().start()

mc.send().start()

}

/**

* 接收信息

*

* @return

*/

private Thread receive()

{

return new Thread()

{

public void run()

{

ServerSocket server_socket = null

Socket sk = null

BufferedReader in = null

try

{

server_socket = new ServerSocket(7777)

sk = server_socket.accept()

in = new BufferedReader(new InputStreamReader(sk

.getInputStream()))

while (true)

{

String str = in.readLine()

System.out.println(str)

}

} catch (Exception e)

{

e.printStackTrace()

}

}

}

}

private Thread send()

{

return new Thread()

{

public void run()

{

Socket client_socket = null

BufferedReader in = null

PrintWriter out = null

while (true)

{

try

{

client_socket = new Socket("127.0.0.1", 8888)

in = new BufferedReader(

new InputStreamReader(System.in))

out = new PrintWriter(new BufferedWriter(

new OutputStreamWriter(client_socket

.getOutputStream())), true)

while (true)

{

String str = in.readLine()

out.println(str)

}

} catch (Exception e)

{

try

{

Thread.sleep(1000)

} catch (Exception ex)

{

ex.printStackTrace()

}

}

}

}

}

}

}

import java.io.BufferedReader

import java.io.BufferedWriter

import java.io.InputStreamReader

import java.io.OutputStreamWriter

import java.io.PrintWriter

import java.net.ServerSocket

import java.net.Socket

public class MutiChat2

{

public static void main(String[] args)

{

MutiChat2 mc = new MutiChat2()

mc.receive().start()

mc.send().start()

}

/**

* 接收信息

*

* @return

*/

private Thread receive()

{

return new Thread()

{

public void run()

{

ServerSocket server_socket = null

Socket sk = null

BufferedReader in = null

try

{

server_socket = new ServerSocket(8888)

sk = server_socket.accept()

in = new BufferedReader(new InputStreamReader(sk

.getInputStream()))

while (true)

{

String str = in.readLine()

System.out.println(str)

}

} catch (Exception e)

{

e.printStackTrace()

}

}

}

}

private Thread send()

{

return new Thread()

{

public void run()

{

Socket client_socket = null

BufferedReader in = null

PrintWriter out = null

while (true)

{

try

{

client_socket = new Socket("127.0.0.1", 7777)

in = new BufferedReader(

new InputStreamReader(System.in))

out = new PrintWriter(new BufferedWriter(

new OutputStreamWriter(client_socket

.getOutputStream())), true)

while (true)

{

String str = in.readLine()

out.println(str)

}

} catch (Exception e)

{

try

{

Thread.sleep(1000)

} catch (Exception ex)

{

ex.printStackTrace()

}

}

}

}

}

}

}

import java.io.*

import java.net.*

import java.awt.*

import javax.swing.*

import java.awt.event.*//引入包。

public class ChatClient {

public static void main(String[] args) {

ChatClient cc = new ChatClient()

cc.receive()

}

JTextField jtf// 文本条

JTextArea jta//文本域。

Socket s//客户端

PrintWriter out//输出流

BufferedReader in//输入流

public ChatClient() {

JFrame frame = new JFrame("ChatClient")//窗口

frame.setSize(400, 300)//大小

jta = new JTextArea()//文本域

jta.setEditable(false)//不可编辑

jtf = new JTextField()//文件条

jtf.addActionListener(new ActionListener() { //添加监听。

public void actionPerformed(ActionEvent arg0) {

send()//调用send()方法

}

})

frame.getContentPane().add(new JScrollPane(jta))//添加滚动条

frame.getContentPane().add(jtf, "South")//添加文本条

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)//关闭窗口。

frame.setVisible(true)//可显示的。

try {

s = new Socket("127.0.0.1", 9000)//连接服务端 socket("主机名",端口号)

in = new BufferedReader(new InputStreamReader(s.getInputStream()))//建立输入流

out = new PrintWriter(s.getOutputStream())//输出流

} catch (UnknownHostException e) {

// TODO Auto-generated catch block

e.printStackTrace()

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

}

public void receive() { //接受服务端发来别的客户端的信息。

while (true) {

try {

String text = in.readLine()//读一行

this.jta.append(text + "\n")//jta 添加上读入的。

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace()

return

}

}

}

public void send() { //发送消息

String text = this.jtf.getText()//得到你输入的消息

this.jtf.setText("")//在文本域中显示你输入的消息。

out.println(text)//打印出。

out.flush()//清空

}

}

Server端

import java.net.*

import java.io.*

import java.util.*//引入包

public class ChatServer {

public static void main(String[] args) throws Exception {

ServerSocket ss = new ServerSocket(9000)//建立服务端,端口号为9000

List list = new ArrayList()//创建个List集合。

while (true) {

Socket s = ss.accept()//等待客户端的请求。

list.add(s)//把每一个client都add到集合中去。

Thread t = new ServerThread(s, list)//线程。

t.start()//启动。

}

}

}

class ServerThread extends Thread {

Socket s

List list

BufferedReader in

PrintWriter out

public ServerThread(Socket s, List list) { //构造。传入socket和list。

this.s = s

this.list = list

try {

in = new BufferedReader(new InputStreamReader(s.getInputStream()))//输入流

out = new PrintWriter(s.getOutputStream())//输出流

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

}

public void run() { //必须实现其run()方法。

while (true) {

try {

String str = in.readLine()//得到client端的message。

if (str == null) //如果没有消息就返回。

return

Iterator it = list.iterator()//遍历list。

while (it.hasNext()) { //如果list有下一个

Socket socket = (Socket) (it.next())//因为list中都是存的socket

PrintWriter o = new PrintWriter(socket.getOutputStream())//输出流

o.println(str)//输出

o.flush()//清空

}

} catch (IOException e) {

// TODO Auto-generated catch block

// e.printStackTrace()

return

}

}

}

}