小编emg*_*mge的帖子

反序列化函数(字节数组到 uint32 )

编写反序列化函数将字节数组转换为 32 位无符号整数的最佳方法是什么?

    typedef unsigned long  uint32;

    uint32 deserialize_uint32(unsigned char *buffer)
    {
        uint32 value = 0;

        value |= buffer[0] << 24;
        value |= buffer[1] << 16;
        value |= buffer[2] << 8;
        value |= buffer[3];
        return value;

    }

    unsigned char* deserialize_uint32B(unsigned char *buffer, uint32* value)
    {
        *value = 0;

        *value |= buffer[0] << 24;
        *value |= buffer[1] << 16;
        *value |= buffer[2] << 8;
        *value |= buffer[3];
        return buffer + 4;
    }
Run Code Online (Sandbox Code Playgroud)

谢谢!或者如果有更好的方法请告诉我..谢谢!

c arrays deserialization

7
推荐指数
1
解决办法
2万
查看次数

返回一个int或传递一个int指针 - 什么更好?

哪两个更好?

void SetBit(int *flag, int bit)
{
    *flag |= 1 << bit;
}
Run Code Online (Sandbox Code Playgroud)

要么

int SetBit(int flag, int bit)
{
    flag |= 1 << bit;
    return flag;
}
Run Code Online (Sandbox Code Playgroud)

c

6
推荐指数
5
解决办法
418
查看次数

如何在c中隐藏公共API的辅助函数

我正在开发一个项目,我需要创建一个API.我使用套接字在服务器(我的应用程序)和客户端(使用我的API的其他应用程序)之间进行通信.

这个项目是c而不是C++

我来自linux背景,这是我的第一个使用Windows,Visual Studio 2008和dll库的项目.

我在客户端和服务器之间进行通信,但是我在两个项目上都有一些重复.我想创建一个库(可能是一个dll文件),两个项目都可以链接到,所以我不需要维护额外的代码.

我还必须创建具有我需要为我的客户提供的API的库.在我想要公开的API函数中,调用这些辅助函数是"重复代码",我不想将这些函数暴露给我的客户端,但我确实希望我的服务器能够使用这些函数.我怎样才能做到这一点?

我将尝试用一个例子来澄清.这就是我的开始.

服务器项目:

int Server_GetPacket(SOCKET sd);
int ReceiveAll(SOCKET sd, char *buf, int len);
int VerifyLen(char *buf);
Run Code Online (Sandbox Code Playgroud)

客户项目:

int Client_SendCommand(int command);
int Client_GetData(int command, char *buf, int len);
int ReceiveAll(SOCKET sd, char *buf, int len);
int VerifyLen(char *buf);
Run Code Online (Sandbox Code Playgroud)

这是我想要最终得到的结果:

//Server Project:
int Server_GetPacket(SOCKET sd);

// library with public and private types
//  private API (not exposed to my client)
int ReceiveAll(SOCKET sd, char *buf, int len);
int VerifyLen(char *buf);
//  public API (header file available …
Run Code Online (Sandbox Code Playgroud)

c api private public

5
推荐指数
2
解决办法
2026
查看次数

将参数传递给_beginthread() - 什么是错的?

我有这个代码,我没有得到预期的结果......什么是错的?

typedef struct {
   int data1;
   int data2;
}t;

void foo(int a, int b) {

   Handle handle;
   t arg;
   arg.data1 = a;
   arg.data2 = b;
   handle = (HANDLE) _beginthread( myFunc, 0, (void*) &arg);
}

void myFunc(void *param) {
   t *args = (t*) param;
   int x = args->data1;
   int y = args->data2;
   printf("x=%d, y=%d\n", x, y);
} 
Run Code Online (Sandbox Code Playgroud)

c multithreading struct arguments

5
推荐指数
1
解决办法
9120
查看次数

如何在c中获取硬盘信息?

我正在使用MSVS 2008.我正在用c编写应用程序,并且想知道什么是确定硬盘信息的最佳方法,例如可用空间和总容量.

谢谢

c windows hard-drive

2
推荐指数
1
解决办法
1352
查看次数

服务器和客户端是否可以在同一端口上发起通信并发送命令?

我有一个服务器和一个客户端应用程序,我的服务器侦听端口10015和一个发送命令到该端口的客户端.目前两者都在同一台机器上运行,但未来的目标是在不同的机器上运行.我现在正在使用这部分.

我接下来需要做的是让我的服务器向我的客户端发送命令.所以我想我可以在客户端的服务器上重新使用我的代码来监听端口.

但我不确定这是最好的方法.建议?

当我第一次尝试这个时,我首先运行我的客户端应用程序,并将命令发送给自己.我的服务器应用程序无法绑定到端口(我假设您只能在给定端口上侦听一个进程?)

问题1)服务器如何向客户端发送命令?我是否必须创建服务器 - >端口10015上的客户端通信和客户端--->服务器在不同的端口,如10016?

问题2)当我使用send()从客户端 - >服务器发送命令时,接收特定命令的ACK的最佳方法是什么?如果我不需要发送任何数据,是否有办法在服务器收到数据包时自动获得ACK?

我目前正在为我要发送的每个命令执行此操作:

create socket()
conenct() to socket
send() packet
then call recv() to receive any data 
then shutdown() connection
and closesocket() at end
Run Code Online (Sandbox Code Playgroud)

不确定是否有更好的方法吗?当我的应用程序忙时,我希望每秒发送1-10个命令.

谢谢,我是这个网络应用程序的新手,所以任何帮助都非常感谢.

阅读一些评论后编辑:
我正在使用TCP协议.当我说ACK时,我的意思是我只是想从其他应用程序获得一些确认,即该命令已被接收并且没有错误地处理

c windows networking client-server

1
推荐指数
1
解决办法
5817
查看次数