socket传输对象

server

public class Server{

    private static int port = 8888;
    private static ServerSocket serverSocket;
    private static Socket socket;

    public static void main(String args[]) throws IOException {  

        serverSocket = new ServerSocket(port, 2);
        socket = serverSocket.accept();
        System.out.println("客户端已链接");  

        try {
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
               JDBCService jdbcService = new JDBCService();

            while(true){

                Employee employee = (Employee) ois.readObject();
                String s= employee.getName();
                if(s.equals("bye")){
                    ois.close();
                    socket.close();
                    System.out.println("关闭服务器的 socket");
                    break;
                }

                jdbcService.add(employee.getName(),employee.getEmail(),employee.getName());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

client

public class Client {

    private static int port = 8888;
    private static String host = "localhost";
    private static Socket socket;  

    public static void main(String args[]) throws UnknownHostException,
            IOException {
        socket = new Socket(host, port);
        ObjectOutputStream oos= new ObjectOutputStream(socket.getOutputStream());
        Employee employee =new Employee();

        while(true){
            employee.setName("王小东");
            employee.setEmail("[email protected]");
            employee.setPwd("12334");
            // 发送键盘输入的一行
            String s = new BufferedReader(new InputStreamReader(System.in)).readLine(); 

            if(s.equals("bye")){
                employee.setName("bye");
                oos.writeObject(employee);
                oos.flush();

                oos.close();
                socket.close();
                System.out.println("关闭客户端的 socket");
                break;
            }else if(s.equals("send")){
                oos.writeObject(employee);//写入数据
                oos.flush();//发送数据
            }else{
                System.out.println("无效指令,请重新输入");
            }
        }
    }
}

JDBCService.java

public class JDBCService {

    //插入操作
    public int add(String uname,String uemail,String upwd) {
        int i=0;
        String sql="insert into employee (name,email,pwd) values (?,?,?)";
        DBConnection db = new DBConnection();
        try {
            PreparedStatement preStmt = (PreparedStatement) db.conn.prepareStatement(sql);
            preStmt.setString(1, uname);
            preStmt.setString(2, uemail);
            preStmt.setString(3, upwd);
            preStmt.executeUpdate();
            //Statement statement = (Statement) db.conn.createStatement();
            //statement.executeUpdate(sql);

            preStmt.close();
            db.close();//关闭连接
        } catch (Exception e) {
            e.printStackTrace();
        }
        return i;//返回影响的行数,1为执行成功
    }
    //查找操作
    public void show(){
         String sql ="select * from employee";
         DBConnection db = new DBConnection();

         System.out.println("-----------------");
         System.out.println("姓名" +"\t"+ "邮箱" +"\t"+ "日期");
         System.out.println("-----------------");

         try {
            Statement stmt = (Statement) db.conn.createStatement();
            ResultSet rs = (ResultSet) stmt.executeQuery(sql);
            while(rs.next()){
                String uname = rs.getString("name");
                String uemail = rs.getString("email");
                String uhiredate = rs.getString("hiredate");
                //可以将查找到的值写入类,然后返回相应的对象
                //这里 先用输出的端口显示一下
                System.out.println(uname +"\t"+ uemail +"\t"+ uhiredate);
            }
            rs.close();
            db.close();//关闭连接
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //更新操作
    public int update(String uname,String uemail,String upwd) {
        int i =0;
        String sql="update employee set email=?,pwd=? where name=?";
        DBConnection db = new DBConnection();

        try {
            PreparedStatement preStmt = (PreparedStatement) db.conn.prepareStatement(sql);
            preStmt.setString(1, uemail);
            preStmt.setString(2, upwd);
            preStmt.setString(3, uname);
            preStmt.executeUpdate();

            preStmt.close();
            db.close();//关闭连接
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return i;//返回影响的行数,1为执行成功
    }
    //删除操作
    public int del(String uname) {
        int i=0;
        String sql="delete from employee where name=?";
        DBConnection db = new DBConnection();
        try {
            PreparedStatement preStmt = (PreparedStatement) db.conn.prepareStatement(sql);
            preStmt.setString(1, uname);
            preStmt.executeUpdate();

            preStmt.close();
            db.close();//关闭连接
        } catch (SQLException e){
            e.printStackTrace();
        }
        return i;//返回影响的行数,1为执行成功
    }
}

Employee.java

public class Employee implements Serializable{
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    private Integer id;
    private String name;
    private String pwd;
    private Integer grade;
    private String email;
    private java.util.Date hiredate;
    private Float salary;

    public Employee() {

    }

    public Employee(String name, String pwd, Integer grade, String email, Date hiredate, Float salary) {
        this.name = name;
        this.pwd = pwd;
        this.grade = grade;
        this.email = email;
        this.hiredate = hiredate;
        this.salary = salary;
    }

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public Integer getGrade() {
        return grade;
    }
    public void setGrade(Integer grade) {
        this.grade = grade;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public java.util.Date getHiredate() {
        return hiredate;
    }
    public void setHiredate(java.util.Date hiredate) {
        this.hiredate = hiredate;
    }
    public Float getSalary() {
        return salary;
    }
    public void setSalary(Float salary) {
        this.salary = salary;
    }
}
时间: 2024-12-28 16:58:39

socket传输对象的相关文章

使用Socket传输对象

在使用QT网络通信时一直是简单的发送数据--接收数据,常见的就是发送一个字符串/字节流,然后根据这个字符串/字节流提取出有用的信息. 这样在不是很复杂的通信中可以满足实际需要.但也有弊端,就是每次写网络通信时都是口头约定一个协议,让发送方与接收方都满足这个协议才可以进行正常通信. 这样如果我每次写这样的程序,我都要首先规定好一个的通讯协议,然后再编写相应的代码. 那么如何传输更复杂的数据呢,而且可以不用上述的口头协议? 在JAVA,C#中都有对对象序列化的概念,QT里也有,利用将对象序列化传输可

JAVA Socket传输Object(对象)注意的问题

在java中,可以通过socket将一个对象进行传递,通过ObjectOutputStream,ObjectInputStream来进行写入和读取(具体的方法参考http://blog.csdn.net/zyujie/article/details/8243742),但在传递时需要注意以下两点: 1.传递的对象必须实现Serializable标记接口,实现对象的可序列化.如public class Employee implements Serializable 2.发送和接收的对象包名应该保持

unity探索者之socket传输protobuf字节流(一)

近期在做一个棋牌项目,需要用到socket传输protobuf字节流,在网上找了一些博客和文章后发现,没有特别全面的,所以把自己研究的全部源码拿出来和大家分享,因为刚开始做,可能会有不足的地方,欢迎拍砖~~ 这一篇主要是protocol buffer文件的序列化和解析,废话不多说了,直接上干货 1 /// <summary> 2 /// 将消息序列化为二进制的方法 3 /// </summary> 4 /// <param name="model">

Mina使用总结(四)传输对象ObjectSerializationCodecFactory

用mina框架传输对象,对于开发者来说,直接传输对象,而不用自己编写相应的报文转换代码,将大大节省 开发时间. 即使用对象编码解码器 使用ObjectSerializationCodecFactory 服务端 MinaServer.java代码如下 package com.bypay.mina.server; import java.io.IOException; import java.net.InetSocketAddress; import java.net.SocketAddress;

[C#技术参考]Socket传输结构数据

最近在做一个机器人项目,要实时的接收机器人传回的坐标信息,并在客户端显示当前的地图和机器人的位置.当然坐标的回传是用的Socket,用的是C++的结构体表示的坐标信息.但是C#不能像C++那样很easy的把字节数组byte[]直接的转换成结构,来发送和接收.在C#中要多做一些工作.但是在C或者C++中这是一件很容易的事,只需要一个函数: void *memcpy(void *dest, const void *src, size_t n);//从源src所指的内存地址的起始位置开始拷贝n个字节到

C++ socket 传输不同类型数据的四种方式

使用socket传输组织好的不同类型数据,有四种不同的方式(我知道的嘿嘿): a. 结构体 b. Json序列化 c. 类对象 d. protobuf 下面逐一整理一下,方便以后进行项目开发. 1. 使用结构体 假设需要传送的结构体如下: struct person { char name[20]; // 注意:CPU访问内存的时候,对访问地址有对齐的要求,一般为2的幂次方.所以,有的数据被填充,以满足对齐要求. int age; float high; }; 可在发送数据的地方对数据进行处理,

Netty 4 传输对象

对于Netty在这里就不做过多介绍了,详情咨询http://netty.io/wiki/user-guide-for-4.x.html 我们在使用netty的过程中肯定会遇到传输对象的情况,Netty4通过ObjectEncoder和ObjectDecoder来支持. 首先我们定义一个User对象,一定要实现Serializable接口: import java.io.Serializable; /** * User: hupeng * Date: 14-6-3 * Time: 上午1:31 *

C# Socket传输大文件

1.基础类TransferFiles,client和server都需要 using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; using System.Windows.Forms; namespace Server { public class TransferFiles { public static int SendData(

巧用Android网络通信技术,在网络上直接传输对象

本文首发于CSDN博客,转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8967080 要做一个优秀的Android应用,使用到网络通信技术是必不可少的,很难想象一款没有网络交互的软件最终能发展得多成功.那么我们来看一下,一般Android应用程序里都是怎么实现网络交互的,这里拿一个Boook对象为例: 如上图所示,首先在手机端生成一个Book对象,里面包含书名.作者.价格等数据.为了要将这些数据发送到服务器端,我们要从Book对