【Java】仿真qq尝试:用户注册(二)
参考:
1、corejavaI:使用解耦的try/catch与try/finally
2、Java中try catch finally语句中含有return语句的执行情况(总结版):http://blog.csdn.net/ns_code/article/details/17485221
3、什么时候考虑使用静态方法?http://tonylian.iteye.com/blog/563457(*详细)
思路:
成功注册-->客户端调用Register()方法--->服务器调用save()方法,save用jdbc写。
代码:
1、服务器待命。
package com.xkfx.qq.server; import com.xkfx.qq.tools.serverOnly.Database;
import com.xkfx.qq.tools.transmit.User; import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket; class RegisterServer {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8000); while (true) {
Socket socket = server.accept();
invoke(socket);
}
} private static void invoke(final Socket socket) throws IOException {
new Thread(new Runnable() {
@Override
public void run() {
ObjectInputStream in = null;
PrintWriter out = null;
try {
in = new ObjectInputStream(socket.getInputStream());
out = new PrintWriter(socket.getOutputStream()); Object obj = in.readObject();
User user = (User)obj; if (Database.find(user.getUsername())) {
out.write("这个ID已经被注册了");
} else {
Database.saveUser(user);
out.write("注册成功");
}
out.flush();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
out.close();
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
2、客户端注册
// 用户点击了注册
if (e.getActionCommand().equals("Sign up")) {
// 从JTextField获取用户名和密码
String username = txtUsername.getText();
String password = txtPassword.getText(); // 本地验证用户名、用户密码的合法性
if (Check.idAndPass(username, password)) {
User user = new User(username, password);
JOptionPane.showMessageDialog(this, Server.Register(user));
} else {
// 提示用户重新输入
JOptionPane.showMessageDialog(this, "输入不合法,请重新输入!");
}
}
package com.xkfx.qq.tools.transmit; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.net.Socket; public class Server {
// 注册
public static String Register(User user){
Socket socket = null;
ObjectOutputStream out = null;
BufferedReader in = null; try {
socket = new Socket("localhost", 8000);
out = new ObjectOutputStream(socket.getOutputStream());
in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out.writeObject(user);
out.flush(); return in.readLine();
} catch (Exception e) {
e.printStackTrace();
return "连接服务器失败";
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
后续:
1、发现一个bug,貌似是由于catch里面不能有return造成的。。。
【Java】仿真qq尝试:用户注册(二)的更多相关文章
- 【Java】仿真qq尝试:用户注册(三)
需求: 实现用户名和密码存入数据库. 思路: 1.连接数据表用静态加载块 2.crud写成4个静态方法 具体流程: from:https://www.tutorialspoint.com/jdbc/j ...
- 【Java】仿真qq尝试:用户注册(一)
需求: 1.流程分析:客户端程序拿到用户名和密码,将用户名和密码发送到服务端(在客户端验证合法性),服务端接收并存储用户名和密码,返回给客户端一个信息(可能是成功也可能是失败.) 2.数据怎么存?服务 ...
- 【Java】仿真qq尝试:聊天界面 && 响应用户输入
需求分析: 逐步完善一个“qq仿真”程序. 参考: 1.文本框与文本区:http://www.weixueyuan.net/view/6062.html 2.java布局:http://www.cnb ...
- Java 多线程:锁(二)
Java 多线程:锁(二) 作者:Grey 原文地址: 博客园:Java 多线程:锁(二) CSDN:Java 多线程:锁(二) AtomicLong VS LongAddr VS Synchroni ...
- java之jvm学习笔记二(类装载器的体系结构)
java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...
- 201521123061 《Java程序设计》第十二周学习总结
201521123061 <Java程序设计>第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对 ...
- 201521123072《java程序设计》第十二周学习总结
201521123072<java程序设计>第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象 ...
- 201521123038 《Java程序设计》 第十二周学习总结
201521123038 <Java程序设计> 第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student ...
- 201521123122 《java程序设计》第十二周学习总结
## 201521123122 <java程序设计>第十二周实验总结 ## 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将St ...
随机推荐
- Java中static的使用
static 使用之静态变量: 大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立.然而在某些时候,我们更希望该类所有的对象共享同一个成员.此时就是 static 大 ...
- MongoDB中关于查询条件中包括集合中字段的查询
要查询的数据结构例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ2FvMzY5NTE=/font/5a6L5L2T/fontsize/400/f ...
- java中Comparator的用法 -- 实现集合和数组排序
在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标. 接下来我们模拟下在集合对象中对日期属性进行排序 一.实体类Step package com.l ...
- Java安全API
java提供了完整的密码学API,我们可以结合密码学相关的概念来系统的学习这些API. 1.密码学简介(crypto) 密码学通俗来说就是研究如何对信息进行加密和破密,如果不是专门研究信息安全,通常我 ...
- django用户认证系统——修改密码6
再此之前我们已经完成了用户登录.注册.注销等功能,接下来让我们继续为用户提供修改密码的功能.该功能 Django 的 auth 应用也已经为我们提供,过程几乎和之前的登录功能完全一样. 编写修改密码模 ...
- IOS控件:长度单位换算(UITextField,IBAction,委托事件touchesBegan)
#import <UIKit/UIKit.h> @interface demo7_dayViewController : UIViewController { IBOutlet UITex ...
- 【BZOJ4676】Xor-Mul棋盘 拆位+状压DP
[BZOJ4676]Xor-Mul棋盘 Description 一个n*m的棋盘,左上角为(1,1),右下角为(n,m).相邻的2点之间有连边(如下图中实线)特殊地,(1,i)与(n,i)也连有一条边 ...
- JavaWeb开发的一系列可能的配置
最近电脑硬盘坏了Orz...,重装了.唉!软件什么的都要重新装,重新设置,好麻烦! 我决定写下重装javaweb开发环境的过程 1.Java的安装,配置 https://www.runoob.com/ ...
- 所有版本chromedriver下载
所有版本chromedriver下载 http://chromedriver.storage.googleapis.com/index.html
- 高性能网站服务器的架设优化-Nginx优化
一:对于高性能网站 ,请求量大,如何支撑?思路 在网站架构设计中,大家一定对 LNMP (Linux Nginx Mysql Php) 不陌生.LNMP 确实是一个非常优秀的架构,秉承着自由,开放,高 ...