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();
} } }
Socket通信综合示例的更多相关文章
- Python基于socket模块实现UDP通信功能示例
Python基于socket模块实现UDP通信功能示例 本文实例讲述了Python基于socket模块实现UDP通信功能.分享给大家供大家参考,具体如下: 一 代码 1.接收端 import ...
- .NET开源高性能Socket通信中间件Helios介绍及演示
一:Helios是什么 Helios是一套高性能的Socket通信中间件,使用C#编写.Helios的开发受到Netty的启发,使用非阻塞的事件驱动模型架构来实现高并发高吞吐量.Helios为我们大大 ...
- iOS开发之Socket通信实战--Request请求数据包编码模块
实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...
- Socket 通信(基础原理、实时聊天系统雏形)
什么是 Socket? Socket 英文直译为"孔或插座",也称为套接字.用于描述 IP 地址和端口号,是一种进程间的通信机制.你可以理解为 IP 地址确定了网内的唯一计算机,而 ...
- .net平台下C#socket通信(中)
上篇.net平台下C#socket通信(上)介绍了socket通信的基本原理及最基本的通信方式.本文在此基础上就socket通信时经常遇到的问题做一个简单总结,都是项目中的一些小问题,拿来此处便于下次 ...
- 网络编程:Http通信与Socket通信
http://note.youdao.com/share/?id=f14d304548003f65e34255d3ddf9df31&type=note 网络编程:Http通信与Socket通信 ...
- [转]Flash Socket通信的安全策略
昨天做测试的时候遇到一个问题,做好的SWF在Flash AS3中调试通过,但是发布到html中之后就无法得到数据了.查了一些资料之后找到了解决办法.这里感谢 剑心 提供帮助,以及同事若水三千提供Jav ...
- .net平台下C#socket通信(转)
上篇.net平台下C#socket通信(上)介绍了socket通信的基本原理及最基本的通信方式.本文在此基础上就socket通信时经常遇到的问题做一个简单总结,都是项目中的一些小问题,拿来此处便于下次 ...
- socket 通信之select
对于socket 通信,大家很多都用的单线程通信.同时只能监听一个端口,只能响应一个服务,select的方式可以解决多个socket 被连接的问题.一次可以分配多个资源,只要一个连接便可以进行通信.在 ...
随机推荐
- MacOS平台下@rpath在动态链接库中的应用
一.背景介绍 公司开发的一个底层库被用在了Mac平台的多个产品中.在开发这个底层库的初期,对于Mac OSX下的Install name 并没有过多的了解.对于XCode中的install name项 ...
- 设计模式(十三)代理模式(Proxy Pattern)
一.引言 在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访问到这些对象,如果直接访问对象给系统带来不必要的复杂性,这时候可以在客户端和目标对象之间增加一层中间层,让代 ...
- AJAX实现简单的注册页面异步请求
p { margin: 0px; padding: 0px } AJAX简介 (1)AJAX = 异步 JavaScript 和 XML. (2)AJAX 是一种用于创建快速动态网页的技术. (3)通 ...
- ArcGIS Engine开发之地图基本操作(3)
地图数据的加载 一.加载Shapefile数据 Shapefile文件是目前主流的一种空间数据的文件存储方式,也是不同GIS软件进行数据格式转换常用的中间格式.加载Shapefile数据的方式有两种: ...
- HTML学习(一)基础篇
这篇文章有人比我总结的好,适用于新手,我就适当的铺垫一下,结尾处会给你们网站,我就不班门弄斧了. 一)HTML结构 1.<head>标签 <title> <base/&g ...
- Android 7.1 App Shortcuts使用
Android 7.1 App Shortcuts使用 Android 7.1已经发了预览版, 这里是API Overview: API overview. 其中App Shortcuts是新提供的一 ...
- Android Weekly Notes Issue #219
Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...
- React Native 之生命周期
前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...
- 跳转时候提示Attempt to present on while a presentation is in progress
出现这种情况,例如:我在获取相册图片后,直接present到另一个页面,但是上一个页面可能还未dismiss,所以,要在获取相册图片的dismiss方法的complete的block里面写获取图片及跳 ...
- YII2 载入默认值 loadDefaultValues
本人很懒,所以喜欢找现成的东西来用,所以在载入默认值的时候我直接就选择了Yii2 自带的loadDefaultValues 问题来了,我提交的时候发现我在rules里面设置的default没有工作 [ ...