实现功能:
1.实现用户注册上线,下线
2.实现群聊和私聊功能
3.实现统计当前在线人数
实现思路:
1.首先,要实现服务端与客户端之间的连接
这里是使用套接字建立TCP连接:
(1)服务器端先实例化一个描述服务器端口号的ServerSocket对象
(2)客户端要创建Socket对象来连接指定的服务器端
(3)服务器端调用ServerSocket类的accept()方法来监听连接到服务器端的客户端信息
(4)若服务器端与客户端连接成功,双方将返回一个Socket对象,此时双方可以进行通信
(5)服务器端与客户端使用I/O流进行连接,服务端的输出流连接客户端的输入流,客户端的输出流连接服务端的输入流
(6)使用close()方法关闭套接字(一定要记得关闭)
2.因为是拥有一个服务端来实现多个客户端的连接,此处还要解决的是多线程的问题。
每个客户端需要两个线程,来分别处理向服务端发送消息和向服务端接收消息
而服务端,当每增加一个客户端与服务端连接,服务端都要多创建一个线程来处理与客户端的连接
具体代码:
单线程实现:
客户端
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
/**
* @author LXY
* @email 403824215@qq.com
* @date 2018/7/20 15:46
*/
//客户端
public class SingleClient {
public static void main(String[] args) throws IOException {
//客户端连接服务器,返回套接字Socket对象
Socket socket = new Socket("127.0.0.1",6666);
//获取服务端的输出流,向服务器端输出内容
PrintStream printStream = new PrintStream(socket.getOutputStream());
printStream.println("我是客户端" + socket.getLocalPort());
//获取服务器端的输入流,读取服务器端的内容
Scanner scanner = new Scanner(socket.getInputStream());
scanner.useDelimiter("\n");
if(scanner.hasNext())
{
System.out.println(scanner.next());
}
//关闭流
socket.close();
}
}
服务端
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
/**
* @author LXY
* @email 403824215@qq.com
* @date 2018/7/20 15:34
*/
//服务端
public class SingleServer {
public static void main(String[] args) throws IOException {
//创建服务器端的ServerSocket对象,等待客户端进行连接
ServerSocket serverSocket = new ServerSocket(6666);
System.out.println("