求一个简单的java的socket程序,基于二进制传输的代码我在弄一个java的客户端但是不知道如何来封装二进制数据包 比如我的服务端是要求一个包开头的4字节是两个short类型数据
后面是具体的包的数据如果用c++我可以定义两个数组来实现但是我发现在java里面应该是不需要这样做所以肯定各位朋友来给个例子服务端我现在已经有了主要看客户端的实现思路不需要很复杂,只要能够把客户端收到数据解开,和打包一个数据包发出去就ok如果能保证代码是准确的,代码片段也行请各位高手赐教,在线等

解决方案 »

  1.   

    用普通的Socket和ServerSocket来建立连接。但操作流的时候用 ObjectInputStream 和 ObjectOutputStream 来包装就好了。直接提供readInt()之类的操作。
      

  2.   

    http://blog.sina.com.cn/s/blog_6189ab480100i95e.html
      

  3.   

    另外补问一个问题我在java里面没看见有send之类的函数如何发送出去呢
      

  4.   


    看来你确实没有搞过Socket编程啊,TCP连接是长连接,直接通过InputStream和OutStream进行read和write操作。你说的send,应该是UDP方面的,用DatagramSocket。而我说的ObjectOutputStream其实也是建立在Socket的OutputStream基础上进行的封装,以支持对各种对象类型的写入操作。
      

  5.   

    附上一个例子片段,服务端,只发送个Hello:        ServerSocket serverSocket;
            Socket socket;
            while (true) {
                serverSocket = new ServerSocket(PORT);
                log("服务端就绪,等待客户端连接");            // 侦听并接受到此套接字的连接。此方法在进行连接之前一直阻塞。
                socket = serverSocket.accept();
                log("有客户端连接上来了,已建立Socket链接");            // 准备好输出
                DataOutputStream socketOut = new DataOutputStream(socket.getOutputStream());            socketOut.writeUTF("Hello");            // 发送结束标志
                socketOut.writeLong(-1);            serverSocket.close();
            }
      

  6.   

    呵呵
    我没有搞过java的
    我只搞过c++的
    send是tcp协议用到的函数
    udp刚好不是send我的问题其实是
    无论是tcp还是udp或者其他套接字总得有一个动作把缓冲区里面的数据发送出去吧在java里面是哪个啊能给点代码吗?
      

  7.   

    续,Client端:
            Socket socket = new Socket(SERVER, PORT);
            try {
                log("成功连接服务器端,准备接收");
                DataInputStream socketIn = new DataInputStream(new BufferedInputStream(socket.getInputStream()));            String str = socketIn.readUTF();
                log("收到数据:" + str);            socketIn.readLong();// 读取结束符-1        } finally {
                socket.close();
            }
      

  8.   

    感谢楼上的
    就那个意思那么写入数据呢是不是BufferedOutputStream
      

  9.   

    写入数据的样例,在7楼,代码都是一样的:
    DataOutputStream socketOut = new DataOutputStream(socket.getOutputStream());关于流的操作,Server端和Client端一样。