Socket通信综合示例

1用户注册
客户单选择‘用户注册’,提示要输入用户名,密码,确认密码,校验成功后将用户
信息保存到数据库,并提示数据库注册成功,请登录
2用户登录
客户端选择‘登录以后’后,提示输入用户名和密码,验证成功则提示上传文件
,验证失败则给出提示信息,并可以重新登录
3文件上传
客户端输入上传文件的路径,并读取文件数据,通过输出流发送到服务端,服务端接受
后将上传文件保持在数据库

package com.slp.entity;

import java.io.Serializable;

public class File implements  Serializable {

    /**
*
*/
private static final long serialVersionUID = 1254554707571682105L;
private int fid;
private String fname;
private byte[] focntent;
public int getFid() {
return fid;
}
public void setFid(int fid) {
this.fid = fid;
}
public String getFname() {
return fname;
}
public void setFname(String fname) {
this.fname = fname;
}
public byte[] getFocntent() {
return focntent;
}
public void setFocntent(byte[] focntent) {
this.focntent = focntent;
}
public File(int fid, String fname, byte[] focntent) {
this.fid = fid;
this.fname = fname;
this.focntent = focntent;
}
public File(String fname,byte[] focntent){
this.fname=fname;
this.focntent=focntent;
} }
package com.slp.entity;

import java.io.Serializable;

public class Users implements  Serializable{

    /**
*
*/
private static final long serialVersionUID = -7751437846681691870L;
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Users(int id, String username, String password) {
super();
this.id = id;
this.username = username;
this.password = password;
}
public Users(){ } }
package com.slp.service;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import com.imooc.entity.File;
import com.imooc.util.Util; public class FileService {
private Connection conn = null;
private PreparedStatement ptmt = null;
private ResultSet rs = null; public void savefile(File file) {
String sql = (" insert into tb_file(fname,focntent) values(?,?)");
try
{ conn=Util.getConnection();
ptmt = conn.prepareStatement(sql);
ptmt.setString(1, file.getFname());
ptmt.setBytes(2, file.getFocntent());
ptmt.executeUpdate();
} catch ( SQLException e)
{
e.printStackTrace();
} finally{
Util.closeAll(conn, ptmt, rs);
}
} }
package com.slp.service;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import com.imooc.entity.Users;
import com.imooc.util.Util; public class UsersService {
private PreparedStatement ptmt = null;
private ResultSet rs = null;
private Connection conn=null;
public void zhuce(Users users) {
String sql = "insert into tb_user(username,password) values(?,?)";
try {
conn=Util.getConnection();
ptmt = conn.prepareStatement(sql);
ptmt.setString(1, users.getUsername());
ptmt.setString(2, users.getPassword());
ptmt.execute();
} catch (SQLException e) {
e.printStackTrace();
} finally {
Util.closeAll(conn, ptmt, rs);
}
} public Boolean Denglu(Users users){
String sql = "Select username,password from tb_user where username=? and password=? ";
try { conn = Util.getConnection();
ptmt = conn.prepareStatement(sql);
ptmt.setString(1, users.getUsername());
ptmt.setString(2, users.getPassword());
rs = ptmt.executeQuery();
if (rs.next()) {
return true;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
Util.closeAll(conn, ptmt, rs);
}
return false;
} }
package com.slp.socket;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner; import com.imooc.entity.File;
import com.imooc.entity.Users;
import com.imooc.service.FileService;
import com.imooc.service.UsersService;
import com.imooc.util.CommendTranser; public class SocketClient {
Scanner scan = new Scanner(System.in);
private Socket socket = null;
// Socket ss = new Socket("localhost", 1346);
// Scanner scan = new Scanner(System.in);
// String in = scan.next();
// InputStream is = ss.getInputStream();
// InputStreamReader isr = new InputStreamReader(is);
// BufferedReader bfr=new BufferedReader(isr);
// String info;
// while((info=bfr.readLine())!=null){
// System.out.println("我是客户端 "+"\t"+"服务器说"+info);
// }
//
//
// OutputStream os = ss.getOutputStream();
// PrintWriter pw = new PrintWriter(os);
// pw.write(in); public void showMainMenu() {
System.out.println("******欢迎使用imooc上传器*******");
System.out.println("1 用户登录 ,2 用户注册 ,3 退出");
System.out.println("***************************");
System.out.println("请选择:》》》》》》》》");
int choose = scan.nextInt();
switch (choose) {
case 1:
showlogin();
break;
case 2:
showzhuce();
break;
case 3:
System.out.println("再见了,你炸了");
System.exit(0);
default:
System.out.println(" 输入有误");
System.exit(0);
}
} public void showlogin() {
Users users = new Users();
System.out.println("欢迎使用登录");
CommendTranser transer = new CommendTranser();
int count = 0;
while (true) {
if (count >= 3) {
System.out.println("您已经三次输入失败,再见");
System.exit(0);
}
System.out.println("请输入用户名");
users.setUsername(scan.next());
System.out.println("请输入密码");
users.setPassword(scan.next());
transer.setCmd("login");
transer.setData(users);
count++;
try {
socket = new Socket("localhost", 1346);
sendData(transer);
transer=getDate();
System.out.println(" " + transer.getResult());
System.out.println("***********************");
if (transer.isFlag()) {
break;
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
clossAll();
} }
showUploadFile(); } public void showzhuce() {
Users users = new Users();
System.out.println("欢迎使用注册");
CommendTranser transer = new CommendTranser();
while (true) {
System.out.println("请输入用户名");
users.setUsername(scan.next());
System.out.println(" 请输入密码");
users.setPassword(scan.next());
System.out.println("请再次输入密码");
String rePassword = scan.next();
if (!users.getPassword().equals(rePassword)) {
System.out.println("俩次输入不一致");
System.out.println("**************");
continue;
}
transer.setCmd("zhuce");
transer.setData(users);
try {
socket = new Socket("localhost", 1346);
sendData(transer);
transer=getDate();
System.out.println(" " + transer.getResult());
System.out.println("***********************");
if (transer.isFlag()) {
break;
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
clossAll();
}
}
showUploadFile();
} public void showUploadFile() {
System.out.println("请输入上传的绝对路径 如: (e://imooc//dog.jpg)");
String path = scan.next(); File file = null;
FileInputStream fis = null;
BufferedInputStream bis = null;
String fname = path.substring(path.lastIndexOf("/") + 1);
try {
fis = new FileInputStream(path);
byte[] focntent = new byte[fis.available()];
bis = new BufferedInputStream(fis);
bis.read(focntent);
file = new File(fname, focntent); } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
} CommendTranser transer = new CommendTranser();
transer.setCmd("uploadFile");
transer.setData(file);
try {
socket = new Socket("localhost", 1346);
sendData(transer);
transer=getDate();
System.out.println(transer.getResult());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
clossAll();
}
} public CommendTranser sendData(CommendTranser transer) {
ObjectOutputStream oos=null;//对象输出流
try {
oos=new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(transer);
return transer;
} catch (IOException e) {
e.printStackTrace();
}
return null;
} public CommendTranser getDate(){
ObjectInputStream ois =null;//对象输入流
CommendTranser transer = null;
try {
ois=new ObjectInputStream(socket.getInputStream());
transer= (CommendTranser) ois.readObject();
} catch (IOException e) {
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return transer;
} public void clossAll() {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.slp.socket;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner; public class SocketServer { public static void main(String[] args) {
try {
ServerSocket serversocket=new ServerSocket(1346);
Socket socket=null;
System.out.println("");
while(true){
socket=serversocket.accept();
System.out.println("欢迎您..");
SocketThread thread=new SocketThread(socket);
thread.start(); } } catch (IOException e) {
e.printStackTrace();
} }
}
package com.slp.socket;

public class SocketStart {

    public static void main(String[] args) {

        SocketClient client=new SocketClient();
client.showMainMenu();
}
}
package com.slp.socket;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket; import com.imooc.entity.File;
import com.imooc.entity.Users;
import com.imooc.service.FileService;
import com.imooc.service.UsersService;
import com.imooc.util.CommendTranser; public class SocketThread extends Thread{ private Socket socket=null;
private ObjectInputStream ois =null;//对象输入流
private ObjectOutputStream oos=null;//对象输出流
private UsersService us=new UsersService();//用户业务对象
private FileService fs=new FileService();//文件业务对象
//通过构造方法,初始化socket
public SocketThread (Socket socket){
this.socket=socket;
}
@Override
public void run() {
try {
ois=new ObjectInputStream(socket.getInputStream());
oos=new ObjectOutputStream(socket.getOutputStream());
CommendTranser transer=(CommendTranser)ois.readObject();
transer=execute(transer);
oos.writeObject(transer); } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public CommendTranser execute(CommendTranser transer){
String cmd =transer.getCmd();
if(cmd.equals("login")){
Users users=(Users)transer.getData();
boolean flag=us.Denglu(users);
transer.setFlag(flag);
if(flag){
transer.setResult("登录成功");
}else{
transer.setResult("用户名或密码不正确");
}
}else if(cmd.equals("zhuce")){
Users users=(Users)transer.getData();
us.zhuce(users);
boolean flag= us.Denglu(users);
transer.setFlag(flag);
if(flag){
transer.setResult("注册成功");
}else{
transer.setResult("注册失败,未知原因"); }
}else if(cmd.equals("uploadFile")){
File file=(File)transer.getData();
fs.savefile(file);
transer.setResult(" 上传成功");
}
return transer;
} }
package com.slp.util;

import java.io.Serializable;

public class CommendTranser implements  Serializable {
private static final long serialVersionUID = 1L;
private String cmd;//当前操作的命令
private Object data;//发送的数据
private boolean flag;//操作是否成功
private String result;//返回的结果
public String getCmd() {
return cmd;
}
public void setCmd(String cmd) {
this.cmd = cmd;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
} }
package com.slp.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//注:我是将原来的引用Util util=new Util(); public class Util {
// private static final String URL = "jdbc:mysql://127.0.0.1:3306/imooc";
// private static final String NAME = "root";
// private static final String PASSWORD = "199666";
//
// public static Connection conn=null;
//
// static{
// // 获得数据库的连接
// try {
// Class.forName("com.mysql.jdbc.Driver");
// conn = DriverManager.getConnection(URL, NAME, PASSWORD);
// } catch (SQLException e) {
// e.printStackTrace();
// } catch (ClassNotFoundException e) {
// e.printStackTrace();
// }
// } // public Connection getConnection(){
//
//
// return conn;
//} public static Connection getConnection(){
String driverClassName="com.mysql.jdbc.Driver";
String URL = "jdbc:mysql://127.0.0.1:3306/imooc";
String username = "root";
String password = "199666";
Connection conn=null;
try {
Class.forName(driverClassName);
conn=DriverManager.getConnection(URL, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
} // 关闭资源的操作
public static void closeAll( Connection conn,Statement stmt,ResultSet rs){ try {
if(conn!=null){
conn.close();
}
if(stmt!=null){
stmt.close();
}if(rs!=null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
} } }
上一篇:visio2010去除直线交叉处的歪曲


下一篇:Linux shell脚本学习(一)