当前位置: 首页 > 知识库问答 >
问题:

读取/写入结构到套接字

司寇瑾瑜
2023-03-14

我正在尝试用套接字从客户端向服务器写入一个结构。

结构是:

typedef struct R
{
int a;
int b;
double c;
double d;
double result[4]; 
}R;

这两个程序(服务器、客户机)的结构是相同的,并且这两个程序的结构是相同的。

客户端程序:

结构R*r;

马洛克..

...(用数据填充结构)

write(socket_fd,(void*)r,size of(R));

服务器程序:

结构R*r;

马洛克..

read(client_fd,(R*)r,size of(R));

这不是将结构从客户端传递到服务器。

如何通过套接字将结构写入服务器??

共有2个答案

郑胡媚
2023-03-14

我假设您正在获取一些数据,但不是以您期望的形式。如果是这样的话,在gdb中添加一个断点并检查客户端代码中r的内存可能会有所帮助。您可以用0xdeadbeef或类似的调试字符串(http://en . Wikipedia . org/wiki/Magic _ number _(programming)# Magic _ debug _ values)填充发送方代码中的结构,以便更容易地识别客户端内存中的数据。我发现这对调试很有帮助。像提到的一些其他答案一样,字节序和部分数据可能是问题所在。检查返回值和错误代码也会有所帮助。

慕容嘉熙
2023-03-14

网络编程的一些基本要素是:

>

  • 一次读取或写入调用可能不会写入要读取/写入的总字节数。检查调用的返回值。它将返回读/写的字节数。如果写入的字节较少,则应在循环中调用 write,直到写入所有数据。这同样适用于阅读。

    机器的美观性也很重要。如果你写了一个小端序的int(例如x86),那么在网络上旅行时,它会被转换成一个大端值。你需要在POSIX中使用诸如htons,ntohs之类的API来适应这种情况。

    这些只是起点,但最有可能的原因是数据没有达到您期望的形式的目的地。

  •  类似资料:
    • 在我的客户端/服务器应用程序中,我的客户端wiil与服务器通信有两个功能:客户端要么向服务器请求数据,要么发送数据,以便服务器保存。我对这两种方法都使用一个套接字,要使用的方法由发送的第一个字节定义。如果第一个字节是“1”,它将请求数据。如果是“2”,它将发送数据(数据字节在“2”字节之后发送)。它非常适合发送数据。但是当我请求数据时,只要我不读取客户端中的套接字流,它就可以工作。这就像如果我在发

    • 我正在尝试使用java套接字构建一个简单的多客户端聊天应用程序。我这样做的方式是,让一个客户机类连接到一个服务器类,该服务器类等待客户机连接,并创建一个新线程来处理该客户机(套接字连接在那里被读取和写入)。客户端还读取和写入到该线程的套接字连接。但是,当客户机写入套接字的输出流时,服务器不会响应。这里发布了一个类似的问题: 您可以同时写入套接字输入和输出流吗? 这里的一个答案是,只要在单独的线程上

    • 如何通过tcp套接字接收struct并输出到文件?我有一个结构,这是一个包,我试图通过套接字发送它,在客户端接收它,并写入文件。我使用一个空指针作为缓冲区来存储文件数据 到目前为止,我有 我能够访问客户端的 id、int,但是当我将数据写出到文件时。文件似乎已损坏。 更新: 服务器有一个打开的文件,它将从该文件中读取数据,并将其制成一个数据包,然后将该数据包发送给客户端。 客户端还将打开一个文件进

    • socket_read和socket_recv之间有什么区别?我正在尝试使用PHP套接字,但使用socket_read时收到了以下警告: 请帮帮我!

    • 我使用一个具有双向通信的套接字设置了一个客户端-服务器模型。 应该是这样的:1。客户端-发送单词数组2。服务器-读取单词数组3。服务器-发送布尔值4。客户端-读取布尔值5。客户端-发送图像6。服务器读取图像 这个过程在一个循环中,与第一次迭代完美配合,但在第二次迭代中,我得到了以下错误: JAVA网SocketException:软件导致的连接中止:套接字写入错误 我认为发生的是,当服务器返回到读

    • 我已经看到了很多与我试图做的事情有关的问题,但我还没有找到任何解决方案。 我尝试编写两个套接字程序(一个客户端和一个服务器),以便服务器能够向客户端发送任何类型的文件(按字节)。我不确定如何构建/协调以下内容: > (在服务器中)读取语句从文件中获取数据(我使用fread()) (在服务器中)将数据发送到客户端的write语句(我使用的是write()) (在客户端)读取语句从服务器接收数据(我使