socket通信综合示例

霓裳梦竹 霓裳梦竹     2022-08-15     217

关键词:

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("我是客户端 "+"	"+"服务器说"+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通信

socket通信的伪代码流程: socket简单的示例代码client端的代码:1importsocket23client=socket.socket()4client.connect((‘localhost‘,3001))56client.send(b‘hhhh‘)7data=client.recv(1024)8print(‘recv:‘,data)910client.close()1 查看详情

谁能用c语言写个最简单socket通信服务端和客户端示例

参考技术A网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。下面... 查看详情

优秀的国产高性能tcp/udp/http开源网络通信框架——hp-socket

参考技术AHP-Socket是国人开发的一套高性能的TCP/UDP/HTTP网络通信框架,包含了服务端、客户端以及Agent组件,可用于各种不同应用场景的通信系统,并且提供了C/C++、C#、Delphi、E、Java、Python等编程语言接口。HP-Socket对通信层完全封... 查看详情

javasocket编程api基础

 Socket是Java网络编程的基础,深入学习socket对于了解tcp/ip网络通信协议很有帮助,  此文讲解Socket的基础编程。Socket用在哪里:①、主要用在进程间,②、网络间通信。文章目录如下:一、Socket通信基本示例二、消息通信优... 查看详情

实现tcpudp相互通信及应用

实验名称 Socket编程综合实验(1)  一、实验目的:     1、理解进程通信的原理及通信过程    2、掌握基于TCP和UDP的工作原理    3、掌握基本的Socket网络编程原理及方法... 查看详情

c#socket通信时如何限速?(代码片段)

以下是ChatGPT给出的答案:对socket通信进行限速一般可以通过设置发送和接收缓冲区的大小来实现。具体来说,可以通过以下步骤实现:创建一个Socket对象。调用Socket对象的SetSocketOption方法,将SocketOptionLevel属性设置为SocketOptionLev... 查看详情

GIO socket-server / -client 示例

】GIOsocket-server/-client示例【英文标题】:GIOsocket-server/-clientexample【发布时间】:2012-03-1918:39:36【问题描述】:我想创建一个使用GIO通过套接字进行通信的服务器和客户端应用程序。GSocketService和GSocketClient似乎非常适合此目的,... 查看详情

freecplus框架-tcp网络通信(代码片段)

...译规则文件是freecplus/demo/makefile。二、概述freecplus框架对socket通信封装如下:CTcpClient类:socket通信的客户端类。CTcpServer类:socket通信的服务端类。TcpRead函数:接收socket的对端发送过来的数据。TcpWrite函数:向socket的对端发送数... 查看详情

HTML5 web sockets - 如何与它们通信?

】HTML5websockets-如何与它们通信?【英文标题】:HTML5websockets-howtocommunicatewiththem?【发布时间】:2014-07-2421:19:07【问题描述】:我测试了许多套接字示例,它们之间的通信非常简单:套接字打开并保持打开状态,直到您关闭它,并... 查看详情

flask项目下的uwsgi配置方式及示例

...档,下面是自己的一些理解(可能不完全正确)!图一是socket方式,现在大部分web服务器(如nginx)支持uwsgi,这是这三种方式最高效的一种形式,socket通信速度会比http快图二是http-socket方式,这个适用于web服务器不支持uwsgi时。... 查看详情

[架构之路-62]:目标系统-平台软件-基础中间件-linuxsocket网络进程间通信的基本原理与示例(af_inetaf_unixaf_tipc)(代码片段)

目录前言:第1章LinuxSocket网络进程间通信概述1.1概述1.2基本的网络架构1.3协议栈分层1.4 网间进程标识的标识问题1.5创建socket与Socket标识1.5 AF_INET、AF_UNIX、AF_TIPC区别第2章Socket的本质2.1socket套接字的进一步解读2.2套接字描述... 查看详情

unity聊天室(socket编程)(代码片段)

示例:  什么是Socket:Socket(套接字),用来描述IP地址和端口,是通信链的句柄,应用程序可以通过Socket向网络发送请求或者应答网络请求!Socket是支撑TCP/IP协议的网络通信的基本操作单元,... 查看详情

基于`caché/iris`实现`socket`解决方案(代码片段)

文章目录基于`Caché/IRIS`实现`Socket`解决方案简介什么是`Socket`?`Socket`有两种类型使用场景`Socket`与`WebSocket`的区别工作流程示例1.利用`Socket`实现简单客户端、服务器通信。2.利用`S... 查看详情

socket通信流程

Socket通信流程HTTP底层就是通过socket建立连接通信管道,实现数据传输HTTP是一个TCP的传输协议(方式),它是一个可靠,安全的协议  查看详情

socket通信的流程

客户端:创建socket对象    socket.connect连接服务器    发送数据socket.send    接受数据socket.receive    挂断socket.close服务端:创建socket对象    socket.bind绑定端口    socket.listen开始监听    socket.appec... 查看详情

socket(代码片段)

socket:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一段称为一个socketsocket通信示例:1packagepers.example.demo.socket;23importjava.io.InputStream;4importjava.net.ServerSocket;5importjava.net.Socket;67publicclassSocketTest8publicstaticv... 查看详情

socket通信原理和实践

...程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的。本文的主要内容如下:1、网络中进程之间如何通信?2、Socket是什么?3、socket的... 查看详情

socket通信

socket通信一:socket基于Tcp连接,数据传输有保证 二:socket连接的建立过程:  1:服务器监听  2:客户端发出请求  3:建立连接  4:通信三:一个简单的例子:服务器端每隔一段时间发一些信息1:创建一个服务器端监听的线... 查看详情