这是一个基于Java Socket编程的网络应用程序,既然是基于网络应用那么必然包含客户端程序以及服务器端程序两部分。简要介绍一下项目的设计:
1.服务器方面:
1)要进行网络编程,必须开发服务器端程序,但是开发之前有一些准备工作,那就是必须在你的电脑上安装和配置tomcat环境。具体步骤网上都有详细介绍,这里不再赘述。
2)由于涉及用户的注册登录,所以服务器端不可避免的利用到了数据库。本项目中选择了MySql数据库。再配合Java JDBC(Java database connector)可以很容易地进行数据管理操作。项目代码中已对这部分功能进行了一定的封装可以直接使用。对于MySql的安装配置,网上也有不少教程。不过本人在安装配置过程中总是出现各种奇葩错误,最后只能在网上下载了一个绿色版,解压后进行环境变量配置、mysqld –install mysql(这是mysql服务名称,自定义) –defaults-file=%MYSQL_HOME%\my.ini、net start mysql(和前面定义的名称必须相同)简单三步就可以使用了。安装文件本人也上传到了百度网盘。后面有链接,需要的可自行下载。ps:其中的my.ini文件本人是修改过的,一开始添加了许多参数,发现无法正确开启服务,索性将全部参数都删了,值保存了几个必须设置的参数,所以假如想要自行配置,只需修改这个文件就行了(具体参考度娘)。
3)服务器端使用ServerSocket进行等待服务。也有人称之为”建一个欢迎之门”,这里的欢迎是有一定含义的,本人认为其实阻塞式的主动等待。具体Java语法是ServerSocket welcomeSocket = new ServerSocket(portNumber);Socket connectionSocket = welcomeSocket.accept(),相信进行过Java Socket编程的同学应该不陌生吧!为了实现多个用户同时在线这里将上面两句代码放在了一个线程的while(true)中,每次一个新的用户打开应用时就会触发accept()函数,然后此线程创建一个新的connectionSocket,并且为其开启一个新的线程为其进行消息循环(从socket中取消息、处理消息并得到返回消息、向socket中写入一条消息)服务。
2.客户端方面:
1)每次客户端运行时,其会打开一个到服务器(指定IP地址、端口号)的连接,为了不让连接重置,本人把打开连接、打开输入流、输出流的操作写在了MessageHandler类中一个静态代码块里。每打开一个TCP连接,本人从中打开两个流一个输入一个输出,然后将这两个二进制流封装成为Java对象流InputObjectStream,OutputObjectStream。此后在客户端与服务器端交换的就只是一些本人定义的消息对象了。
2)同样,每次开启一个TCP连接后,客户端也需要维护一个消息循环(从socket中取消息、处理消息并得到返回消息、向socket中写入一条消息)。
项目可执行程序以及源代码:
http://pan.baidu.com/s/1qWEx7OC
mysql绿色版:
http://pan.baidu.com/s/1ntE3Ct7
1.服务器方面:
1)要进行网络编程,必须开发服务器端程序,但是开发之前有一些准备工作,那就是必须在你的电脑上安装和配置tomcat环境。具体步骤网上都有详细介绍,这里不再赘述。
2)由于涉及用户的注册登录,所以服务器端不可避免的利用到了数据库。本项目中选择了MySql数据库。再配合Java JDBC(Java database connector)可以很容易地进行数据管理操作。项目代码中已对这部分功能进行了一定的封装可以直接使用。对于MySql的安装配置,网上也有不少教程。不过本人在安装配置过程中总是出现各种奇葩错误,最后只能在网上下载了一个绿色版,解压后进行环境变量配置、mysqld –install mysql(这是mysql服务名称,自定义) –defaults-file=%MYSQL_HOME%\my.ini、net start mysql(和前面定义的名称必须相同)简单三步就可以使用了。安装文件本人也上传到了百度网盘。后面有链接,需要的可自行下载。ps:其中的my.ini文件本人是修改过的,一开始添加了许多参数,发现无法正确开启服务,索性将全部参数都删了,值保存了几个必须设置的参数,所以假如想要自行配置,只需修改这个文件就行了(具体参考度娘)。
3)服务器端使用ServerSocket进行等待服务。也有人称之为”建一个欢迎之门”,这里的欢迎是有一定含义的,本人认为其实阻塞式的主动等待。具体Java语法是ServerSocket welcomeSocket = new ServerSocket(portNumber);Socket connectionSocket = welcomeSocket.accept(),相信进行过Java Socket编程的同学应该不陌生吧!为了实现多个用户同时在线这里将上面两句代码放在了一个线程的while(true)中,每次一个新的用户打开应用时就会触发accept()函数,然后此线程创建一个新的connectionSocket,并且为其开启一个新的线程为其进行消息循环(从socket中取消息、处理消息并得到返回消息、向socket中写入一条消息)服务。
2.客户端方面:
1)每次客户端运行时,其会打开一个到服务器(指定IP地址、端口号)的连接,为了不让连接重置,本人把打开连接、打开输入流、输出流的操作写在了MessageHandler类中一个静态代码块里。每打开一个TCP连接,本人从中打开两个流一个输入一个输出,然后将这两个二进制流封装成为Java对象流InputObjectStream,OutputObjectStream。此后在客户端与服务器端交换的就只是一些本人定义的消息对象了。
2)同样,每次开启一个TCP连接后,客户端也需要维护一个消息循环(从socket中取消息、处理消息并得到返回消息、向socket中写入一条消息)。
项目可执行程序以及源代码:
http://pan.baidu.com/s/1qWEx7OC
mysql绿色版:
http://pan.baidu.com/s/1ntE3Ct7
解决方案