程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何以二进制格式发送Java对象并在C服务器中接收?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何以二进制格式发送Java对象并在C服务器中接收??

开发过程中遇到如何以二进制格式发送Java对象并在C服务器中接收?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何以二进制格式发送Java对象并在C服务器中接收?的解决方法建议,希望对你解决如何以二进制格式发送Java对象并在C服务器中接收?有所启发或帮助;

尝试CBOR:RFC 7049简洁的二进制对象表示

http://cbor.io/

解决方法

我有一个Java对象,现在我想将其转换为二进制形式(二进制协议)并通过网络发送,C客户端将接收它并打印内容。就像我有一个学生班

学生.java

import java.io.serializable;

public class student implements serializable {

    public String name;
    public int id;

    public String getName() { return name; }

    public void setName(String Name) { this.name = name; }

    public int getId() { return id; }

    public void setId(int id) { this.id = id; }

}

客户端程序

import java.io.bufferedReader;
import java.io.DataOutputStream;
import java.io.FiLeoutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.objectOutputStream;
import java.net.Socket;

public class Client {

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

        student s1 = new student();
        s1.setId(10);
        s1.setName("abc");

        Socket clientSocket = new Socket("localhost",7777);
        DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());

        try {
            FiLeoutputStream fos = new FiLeoutputStream("data.ser");
            ObjectOutputStream oos = new ObjectOutputStream(clientSocket.getOutputStream());
            oos.writeObject(s1);
            // oos.close();
            // fos.close();
        }
        catch(Exception E) {
            e.printStackTrace();
        }
        clientSocket.close();
    }

}

最后一个是server.c,它是用c语言编写的。

服务器

/*
 * C socket server example
 */

#include<stdio.h>
#include<String.h>    //strlen
#include<sys/socket.h>
#include<arpa/inet.h> //inet_addr
#include<unistd.h>    //write

int main(int argc,char *argv[]) {
    int socket_desc,client_sock,c,read_size;
    struct sockaddr_in server,client;
    char client_message[2000];

    // Create socket
    socket_desc = socket(AF_INET,SOCK_STREAM,0);
    if (socket_desc == -1) {
        printf("Could not create socket");
    }
    puts("Socket created");

    // Prepare the sockaddr_in structure
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = INADDR_ANY;
    server.sin_port = htons( 7777 );

    // Bind
    if (bind(socket_desc,(struct sockaddr *)&server,sizeof(server)) < 0) {
        // Print the error message
        perror("bind failed. Error");
        return 1;
    }
    puts("bind done");

    // Listen
    listen(socket_desc,3);

    // Accept and incoming connection
    puts("WaiTing for incoming connections...");
    c = sizeof(struct sockaddr_in);

    // Accept connection from an incoming client
    client_sock = accept(socket_desc,(struct sockaddr *)&client,(socklen_t*)&c);
    if (client_sock < 0) {
        perror("accept failed");
        return 1;
    }
    puts("Connection accepted");

    // Receive a message from client
    while ((read_size = recv(client_sock,client_message,2000,0)) > 0){
        // Send the message BACk to client
        printf("\n%s",client_messagE);
        write(client_sock,strlen(client_messagE));
    }

    if (read_size == 0) {
        puts("Client disconnected");
        fflush(stdout);
    }
    else if (read_size == -1) {
        perror("recv failed");
    }

    return 0;
}

当我运行服务器和客户端时。我得到这样的输出:

 �
 sr
 xp

我希望输出应该是服务器上打印的学生的姓名和ID。

请提供您的建议或其他建议。

大佬总结

以上是大佬教程为你收集整理的如何以二进制格式发送Java对象并在C服务器中接收?全部内容,希望文章能够帮你解决如何以二进制格式发送Java对象并在C服务器中接收?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。