2021/9/14
上学期学习了java,期末时做了一个多人在线聊天室。抽时间来总结一下开发学习历程。类似的文章在csdn上已经有了很多,自己最终做出的作品也不是很出色,刚好利用这个机会改进一下。在总结时我会把每个问题参考的博客链接放在下面。
暑假的时间由于项目需求,接触了点区块链和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地址。
到这里说明连接成功。
$$
$$