2021/9/14

上学期学习了java,期末时做了一个多人在线聊天室。抽时间来总结一下开发学习历程。类似的文章已经有了很多,自己最终做出的作品也不是很出色,刚好利用这个机会改进一下。在总结时我会把每个问题参考的博客链接放在下面。

暑假的时间由于项目需求,接触了点区块链和IPFS里面的知识,尝试下能不能将两个结合起来,做一个区块链多人在线聊天室。

今天算是开了一个坑,希望能填满。

1.测试链接

既然要做一个网络多人的聊天室,那就不能仅限于在本地运行程序。聊天室应该是基于C/S模式的应用程序,这里我们使用腾讯云提供的学生机,1核2G的配置足够我们做这个项目。

当然租用完学生机器之后还需要配置java环境,安装数据库等操作,这里就不再详述。有时间补充一下或者放几个参考链接。

像我们平时使用的qq微信等即时通信工具,我们发送的消息都是需要将消息发送的到服务器上,再由服务器进行转发。我们做的基本的聊天室也是一样,消息的发送需要服务器来进行中转。

与服务器进行信息交互的第一步便是与服务器连接,也就使用到了socket(套接字),socket是什么工作原理这些并不需要我们了解太多,只需要知道这是本地与服务器沟通的桥梁就行了。而java已经将sokcet相关的方法封装了起来,项目使用到的有java.net.Socket/,我们学会调用即可。

首先是本地客户端的测试链接程序

package client;
import java.io.IOException;
import java.net.Socket;
public class ServerConnect {
    public static void main(String[] args) {
        Socket socket=null;
        try {
         // 实例化socket对象,这里使用ip地址和端口号进行连接,java.net.Socket还有其他方法
            socket = new Socket("hostname",9999);
        } catch (IOException e) {
            e.printStackTrace();
        }
         System.out.println(socket);
        //连接成功输出true
        System.out.println(socket.isConnected());
    }
}

java.net.Socket里封装了很多方法。代码里使用ip地址和端口号进行连接。要确保服务器的端口号是打开的。

服务器端测试连接程序

package Server;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
    public static void main(String[] args) {
        Socket socekt=null;
        try {
            //实例化serverSocekt对象,确保这里的端口数和客户端的端口相同
            ServerSocket serverSocket=new ServerSocket(9999);
            //监听
            while(true){
              //如果连接成功,跳出循环
              socekt =serverSocket.accept();
              if(socekt.isConnected()){
                  break;
              }
            }
            System.out.println(socket);
            //输出已连接的客户端的ip地址
            System.out.println(socekt.getInetAddress());
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

serverSocekt在连接后会返回一个socket,客户端和本地都是通过socket与彼此进行交互,两个socket是配对的。对客户端或者服务器来说,两者的交互都是对socekt操作。

连接成功客户端会输出 socket的值和true,服务器端会输出socket和连接的客户端的ip地址。

到这里说明连接成功。