对象流传输数据

本文介绍了一个使用Java实现的客户端和服务端通过对象流进行通信的例子。客户端通过Socket连接到服务器,并利用ObjectOutputStream发送字符串对象;服务器端则通过ObjectInputStream接收并打印该字符串。
摘要由CSDN通过智能技术生成

对象流传输数据

客户端

public MyClicent() {
    try {
        Socket s = new Socket("127.0.0.1",9999);	//对服务器连接
        //通过objectOutputSteam给服务器传送对象
        ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
        String str = "服务器你好,我是客户端";
        oos.writeObject(str);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Socket s = new Socket("127.0.0.1",9999);

参数:
1、主机的回送地址
2、服务器端口号

ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());

新建一个对象流对象,从字节套中获取输出流

oos.writeObject(str);

从获取到的输出流将数据输出

服务端

MyServer.java

try {
    ServerSocket ss = new ServerSocket(9999);	//创建服务器端口
    Socket s = ss.accept();	//阻塞连接
    //以对象流方式读取(假设客户端发送的是String的一个对象)
    ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
    Stringu = (String) ois.readObject();
} catch (Exception e) {
    e.printStackTrace();
}
Stringu = (String) ois.readObject();

从输入流中获取数据,并且转换为String类型:这里必须确定传入的数据是String类型,否则会报错

代码总结

MyClicent.java:客户端

package com.test;

import java.io.ObjectOutputStream;
import java.net.Socket;

public class MyClicent {
    public static void main(String[] args) {
        MyClicent myClicent = new MyClicent();

    }

    public MyClicent() {
        try {
            Socket s = new Socket("127.0.0.1",9999);
            //通过objectOutputSteam给服务器传送对象
            ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
            String str = "服务器你好,我是客户端";
            oos.writeObject(str);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

MyServer.java:服务端

package com.test;

import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class MyServer {
    public static void main(String[] args) {
        new MyServer();
    }
    public MyServer() {
        try {
            System.out.println("在9999端口监听");
            ServerSocket ss = new ServerSocket(9999);
            Socket s = ss.accept();
            //以对象流方式读取(假设客户端发送的是String的一个对象)
            ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
            String str = (String) ois.readObject();
            //输出
            System.out.println("从客户端接收到的字符串:"+str);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

异常:

ClassCastException:表示对象无法被强制转换成要强制转换的类型,后面会有提示是哪两种类型无法转换。
例子:java.lang.Integer cannot be cast to java.lang.String
表示:Integer类型无法转换成String类型
Connection refused: connect:表示客户端要连接的端口没有启动
1、必须先启动服务器再启动客户端
2、检查客户端要连接的端口号与服务器启动的端口号是否是相同的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值