我有一个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 , client_message , 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。
请提供您的建议或其他建议。
尝试CBOR:RFC 7049简洁的二进制对象表示
http://cbor.io/
问题内容: 我已经看到了许多在Java中通过套接字发送序列化数据的示例,但是我想要的只是发送一些简单的整数和字符串。而且,问题是我正在尝试将这些信息传递给用C编写的二进制文件。 因此,最重要的是:如何在Java中通过套接字发送一些字节? 问题答案: 我真的建议不要直接使用Java Sockets库。我发现Netty(来自JBoss)非常易于实现且功能强大。Netty ChannelBuffer类带
问题内容: 我有一个数字,我想以二进制形式打印。我不想通过编写算法来做到这一点,Java中是否有任何内置函数? 问题答案: 假设你的意思是“内置”: 请参阅整数文档。 (Long具有类似的方法,具有可在其中指定基数的实例方法。)
资源 ComplexObject类只是一个带有字符串的类。当我点击URL:http://localhost:8080/simple-service-webapp/webapi/myresource/This work时,我得到的是“get it!” 但是当我点击:http://localhost:8080/simple-service-webapp/webapi/myresource/comple
问题内容: 我想使用POST方法将JSONObject发送到服务器。我已经使用凌空库通过字符串参数来正常工作,但是如果我尝试使用json对象,则在调用json对象时显示错误,这是我的代码 我的错误表单服务器是: 如何解决这个问题呢。我要添加 标题,请检查我的代码是否正确。请给我一个解决这个问题的建议 问题答案: JsonObjectRequest中的第三个参数用于以jsonobject形式传递发布
我必须对FTP服务器进行编码,而且我在数据传输方面遇到了问题。 我在linux上使用ftp命令来测试它,我目前正在使用,它发送工作目录中的文件/目录列表。一切正常(ftp打印文件列表),除了ftp打印以下警告: 我想删除该警告,我认为ftp需要二进制数据,但我不知道如何通过套接字发送这样的数据,我目前正在使用最基本的方式发送结果:
本程序是利用Socket编程将陀螺仪和加速度计信息(6位)发送到服务器。 我的问题是如何做套接字连接和从Android Wear发送数据到服务器(使用套接字连接) 以下是完整的程序:: 相关问题:Android wear不启动线程 我也阅读了http://developer.android.com/training/wearables/data-layer/index.html,但仍然在尝试最好的