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 被连接的问题.一次可以分配多个资源,只要一个连接便可以进行通信.在 ...
随机推荐
- JAVA NIO学习笔记1 - 架构简介
最近项目中遇到不少NIO相关知识,之前对这块接触得较少,算是我的一个盲区,打算花点时间学习,简单做一点个人学习总结. 简介 NIO(New IO)是JDK1.4以后推出的全新IO API,相比传统IO ...
- Google官方关于Android架构中MVP模式的示例续-DataBinding
基于前面的TODO示例,使用Data Binding库来显示数据并绑定UI元素的响应动作. 这个示例并未严格遵循 Model-View-ViewModel 或 Model-View-Presenter ...
- 充电时间 Go中的数组、切片、map简单示例
数组是固定长度的,依稀让我想起了VB:切片是动态的:map一般是键值对 package main import ( "fmt" ) func main() { var userna ...
- CSS3鼠标滑过图标放大以及旋转
本人是HTML5-CSS3初学者,这次分享一款纯CSS3实现的图片动画,当鼠标滑过小图标时,图标会放大,同时图标会出现旋转的动画效果.我们在很多个性化个人博客中经常看到鼠标滑过人物头像后头像图片旋转就 ...
- Struts2入门(三)——数据类型转换
一.前言 笔者一直觉得,学习一个知识点,你首先要明白,这东西是什么?有什么用?这样你才能了解.好了,不说废话. 1.1.类型转换为何存在?什么是类型转换? 在MVC框架中,都是属于表示层解决方案,都需 ...
- java中如何实现多态
复习基础知识 多态,就是重载和重写.重载发生在一个类中.重写发生在子类,意思就是子类重写父类相同名称的方法.刚学语言有的东西,不必搞得那么清楚,只有知道怎么用就行了,有的问题你要想真正把它搞得很懂,短 ...
- Javascript9张思维导图
1.变量 2.运算符 3.数组 4.流程语句 5.字符串函数 6.函数基础 7.DOM操作 8.BOM 9.正则表达式
- navigationController 去掉背景图片、去掉底部线条
//去掉背景图片 [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMe ...
- Android事件分发机制浅谈(二)--源码分析(ViewGroup篇)
上节我们大致了解了事件分发机制的内容,大概流程,这一节来分析下事件分发的源代码. 我们先来分析ViewGroup中dispatchTouchEvent()中的源码 public boolean dis ...
- iOS10 适配问题-Xcode8
前段时间升级了Xcode8,整体来说对OC的影响不大,但是还是跳一个坑,消耗了不少时间.这里总结下遇到的适配问题. 1.权限问题 Xcode8 访问相机.相册等需要权限的地方崩溃 解决办法: 在使用私 ...