免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1979 | 回复: 4
打印 上一主题 下一主题

Java网络发送int的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-31 10:15 |只看该作者 |倒序浏览
我写了一个小C/S程序,代码如下:
/**
* 客户端
*/


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

/**
* @author Jackie
*
*/
public class SocketClient {
        Socket client = null;
        BufferedReader bf = null;
        BufferedReader readbf = null;
        PrintWriter pw = null;
       

        /**
         *
         */
        public SocketClient() {
                try {
                        client = new Socket(InetAddress.getLocalHost(),8080);
                        bf = new BufferedReader(new InputStreamReader(client.getInputStream()));
                        pw = new PrintWriter(client.getOutputStream(),true);
                        readbf = new BufferedReader(new InputStreamReader(System.in));
                       
                        //pw.println(readbf.readLine());2281705833
                        pw.write(741824);
                        //System.out.println(bf.readLine());
                        pw.close();
                        bf.close();
                        readbf.close();
                        client.close();
                } catch (UnknownHostException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                // TODO Auto-generated constructor stub
        }

        /**
         * @param args
         */
        public static void main(String[] args) {
                new SocketClient();
        }

/**
* 服务器端
*/

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
* @author Jackie
*
*/
public class SocketServer {
       
        ServerSocket server = null;
        Socket dataS = null;
        BufferedReader bf = null;
        PrintWriter pw = null;
        int readint;
        /**
         *
         */
        public SocketServer() {
                try {
                        server = new ServerSocket(8080);
                        while(true){
                                this.dataS = this.server.accept();
                                bf = new BufferedReader(new InputStreamReader(dataS.getInputStream()));
                                pw = new PrintWriter(this.dataS.getOutputStream(),true);
                               
                                String line = "bf.readLine()";
                                System.out.println("you input is :" + line +"   "+bf.read());
                                this.pw.close();
                                this.bf.close();
                                this.dataS.close();

                        }
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                // TODO Auto-generated constructor stub
        }

        /**
         * @param args
         */
        public static void main(String[] args) {
                new SocketServer();

        }
       
}
我在客户端给服务器端发送的int是741824,可是得到的结果却是:
you input is :bf.readLine()   20928
这是为什么呢,查看2进制形式,发现在前面会多几个bit,总是这样的,有谁知道为什么吗?

论坛徽章:
0
2 [报告]
发表于 2007-01-31 11:14 |只看该作者
没有用过,没有用过,不过,我有个小疑问,既然客户端向服务器端是按照 int 来发送的 (使用的write(int)方法),为什么不在服务器端按照int来读取呢 (使用 int read() 方法)?

而且 int 的取值范围应该是 0-65535 吧

[ 本帖最后由 白色乌鸦 于 2007-1-31 11:28 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-01-31 14:20 |只看该作者
pw.write(741824);

741824=0xB51C0
Writer.write(int )实际上是往输出流写一个char了,就是两个字节, 也就是把0xB51C0截断成char成了0x51C0,
Reader.read()也是读取一个char两个字节,读到了0x51C0也就是20928

论坛徽章:
0
4 [报告]
发表于 2007-01-31 16:50 |只看该作者
楼上是正解。
PrintWriter的write方法:
public void write(int c)
Write a single character.

Overrides:
write in class Writer
Parameters:
c - int specifying a character to be written.

论坛徽章:
0
5 [报告]
发表于 2007-01-31 22:23 |只看该作者
。。。。这么用不太好吧,用PrintWriter主要是想要用它的打印流性质吧?
你着样还不如用DataOutputStream
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP