您的位置:首页 > 编程语言 > Java开发

【Java】仿真qq尝试:用户注册(二)

2017-04-28 22:10 330 查看
参考:

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(*详细)

4、流与文件(端口 & 文件读写对象)

思路:

成功注册-->客户端调用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造成的。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: