实现聊天室需要具备的知识和用到的API:
端口号:一个应用程序对应一个端口号,比如http服务器的默认端口号80,tomcat服务器默认端口号为8080.数据库服务器的默认端口号为3306。
服务端:
创建一个Socket
ServerSocket serverSocket = new ServerSocket("127.0.0.1",6666);
阻塞直到有客户端连接,返回一客户端的Socket对象。
Socket client = serverSocket.accept();
客户端:
建立和服务端的连接:
Socket socket = new Socket("127.0.0.1", 6666);
当客户端和服务器之间建立连接之后,关系如下
发送消息:
所有的 getInputStream ( ) 用于读取消息的管道
所有的 getOutputStream()用于发送消息的管道
PrintStream用于发送消息。
Scanner用于读取消息。
注意发送消息要使用println,同时读取消息要使用readLine();
线程池:
用于一次创建多个线程,每个线程都会监听一个客户端的连接。相当于一个服务器创建了多个管道,每个管道都对应一个和客户端的连接。当有客户端连接的时候这个管道就由堵塞变成畅通了。
Swing的基础知识。
运行截图:
群聊:
私聊:
其中客户端发送消息和接收消息使用了两个不同的线程。
服务端只是作为一个转发消息的作用。
当某个客户端发送username:tom的时候,服务端会分配一个和客户端的连接,并给客户端分配一个Socket,一个用户对应一个Socket,并存储到HashMap中。
当某个客户端发送G:hello every one,服务端会转发给所有的客户端。
当某个客户端发送P:tom-hello tom的时候,服务端会只转发消息给tom这个socket,如果tom不在线,会提示tom不在线。
当某个客户端发送bye的时候,服务端会从HashMap中删除这个客户端。
点击相应按钮自动给消息加上前缀。
关注微信公众号AI技术,回复 “聊天室” 获取项目源码