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 被连接的问题.一次可以分配多个资源,只要一个连接便可以进行通信.在 ...
随机推荐
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 5 - 数据库设计
数据库方面我们需要的主要功能如下: 联系人有姓名和电子邮件地址. 联系人可以拥有多个地址. 联系人可以拥有多个电话. 为了实现目标,我们需要在数据库中创建下列表.表与表的关系如下图所示: 数据库的脚本 ...
- 带你玩转Visual Studio
带你玩转Visual Studio 带你新建一个工程 工程目录下各文件的含义 解决方案与工程 在这之前先了解一个概念:解决方案与工程. 解决方案(Solution):一个大型项目的整体的工作环境: 工 ...
- Sublime Text 3 支持的热门插件推荐
SublimeText是一款非常精巧的文本编辑器,适合编写代码.做笔记.写文章.它用户界面十分整洁,功能非同凡响,性能快得出奇.这些非常棒的特性 包括任意跳转(Goto Anything).多重选择( ...
- session & cookie(li)
Session & Cookie 一.定义 Session,用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间.Cookie,由服务器端生成,发送 ...
- POJ-3032
算法 准备一个最多能存放13个元素的队列,开始时队列为空. 1. 输入n. 3. 将n加入队列. 4. 令i从n到2执行: // 此时队列中有n-i+1个元素 将i-1加入到队列首部. // 此时队列 ...
- Lind.DDD敏捷领域驱动框架~介绍
回到占占推荐博客索引 最近觉得自己的框架过于复杂,在实现开发使用中有些不爽,自己的朋友们也经常和我说,框架太麻烦了,要引用的类库太多:之前架构之所以这样设计,完全出于对职责分离和代码附复用的考虑,主要 ...
- 【重大更新】开源跨平台物联网通讯框架ServerSuperIO 2.0(SSIO)下载
更新具体细节参见:[更新设计]跨平台物联网通讯框架ServerSuperIO 2.0 ,功能.BUG.细节说明,以及升级思考过程! 声明:公司在建设工业大数据平台,SSIO正好能派上用场,所以抓紧时间 ...
- 《分布式事务解决之道》沙龙ppt共享
大型分布式系统往往由很多“微服务”组成,而不同的微服务往往又连接着不同的数据库,在看似常用的功能背后,可能又需要横跨不同的“微服务”和“数据库”才能实现.那么如何才能保证系统事务的一致性呢?这也同时是 ...
- css3制作炫酷导航栏效果
今天主要利用hover选择器.鼠标滑过查看效果. 一.普通导航栏 Home Content Service Team Contact 对于这种普通的导航栏,只是鼠标滑过的时候颜色会变,所以思路变得很简 ...
- 案例借鉴 | 某通讯巨头的IT建设方案
成都联通作为合并重组后的中国联通在成都的分支机构,拥有基础扎实的通信网络和当前最先进技术的WCDMA网络.随着3G和4G业务的发展领先,成都联通凭借其出色的网络能力和服务,在用户中赢得了口碑. 在IT ...