j2me 点滴15

本文介绍了一种使用Socket进行网络通信的方法,包括客户端和服务端的具体实现步骤。客户端通过建立连接并读取服务器发送的数据来显示图片;服务器端则负责发送图片资源及其大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 socket编程总结
近来学习网络游戏开发,用到socket编程。
socket 编程跟 http编程差不多,一般过程都是建立链接,打开输入或输出流,通过流输入输出资源。

不同之处:
http编程,需要确认其连接状态码,由http协议给出,只有双方,确认好,才能建立链接。
socket则不需要。socket 打开时,需要指定网络端口,端口随便给出,主要保持c/s双方一致即可。
一般是8070,8070由tomact指定。还有,socket中,输入资源方,需要将资源的大小写入流中,以便接受方读取该长度,构造数组。
socket编程分为客户端和服务器端。

客户端:
        SocketConnection conn;
        byte[] readBuffer;
        readBuffer = new byte[4];
       
        try
        {
            conn=(SocketConnection)Connector.open("socket://localhost:8070");
            DataInputStream in = conn.openDataInputStream();
            int imageSize = in.readInt();
            readBuffer = new byte[imageSize];
            in.read(readBuffer,0,imageSize);
            Image image = Image.createImage(readBuffer,0,readBuffer.length);//通过字节数组,构造图片
            this.append(image);     //显示图片      
        }
        catch(Exception e)
        {
            System.out.print(e);
        }

服务器:
        ServerSocketConnection server;
        SocketConnection client;
        byte []writeBuffer;
       
        try
        {
            server=(ServerSocketConnection)Connector.open("socket://:8070");
            client=(SocketConnection)server.acceptAndOpen();
            client.setSocketOption(SocketConnection.DELAY,0); //是否开启Nagle算法
            client.setSocketOption(SocketConnection.LINGER,5); //设置服务器的悬挂等待时间
            client.setSocketOption(SocketConnection.KEEPALIVE,0);
            client.setSocketOption(SocketConnection.RCVBUF,1024); //设置接收缓冲
            client.setSocketOption(SocketConnection.SNDBUF,1024); //设置发送缓冲
            OutputStream os=client.openOutputStream();
           
            InputStream imageIn=getClass().getResourceAsStream("/img/index_logo.png");//利用资源构造输入流
            int imageSize = imageIn.available();//资源长度
            byte[]imageBuffer = new byte[imageSize];
            imageIn.read(imageBuffer,0,imageSize);
           
            ByteArrayOutputStream bos=new ByteArrayOutputStream();
            DataOutputStream dos = new DataOutputStream(bos);
            dos.writeInt(imageSize);
            dos.flush();
            writeBuffer = bos.toByteArray();//bos 仅仅是将资源长度写入流
            os.write(writeBuffer,0,writeBuffer.length);
            os.write(imageBuffer,0,imageSize);
            os.flush();
        }
        catch(Exception e)
        {
            System.out.print(e);
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值