如何使用C语言中的套接字将字符串发送到结构上的服务器

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (42)

我需要帮助,我需要发送一个使用socket的结构中的字符数组。这是我的客户端代码:

struct myStruct {
  char str[100];
  long int data;
};
int sock = 0;
char buffer[128];
struct myStruct *st = (struct myStruct *) buffer;
long int size;

strcat(st->str, "hello");
pkt->data = 1;

if (send(sock,st,sizeof(st),0) <0)
    printf ("error\n");

这是我的服务器端代码:

     long int Data;
     char Str[100];
     char bytes_to_receive;
     char received_bytes;
     struct myStruct
     {
        char str[100];
        long int data;
     };
     sd = client_socket[i];
     char buffer[128];
     struct myStruct *st = (struct myStruct *) buffer; 
     bytes_to_receive = sizeof(st);
     received_bytes = 0;
     if (recv(sd, st, sizeof(st), 0) < 0) {
          //Somebody disconnected , get his details and print
          getpeername(sd , (struct sockaddr*)&address , \
                            (socklen_t*)&addrlen);
                printf("Host disconnected , ip %s , port %d \n" ,
                       inet_ntoa(address.sin_addr) , ntohs(address.sin_port));

                //Close the socket and mark as 0 in list for reuse
                close( sd );
                client_socket[i] = 0;
            }  else {
                do {
                    received_bytes += (buffer + received_bytes, bytes_to_receive - received_bytes);
                } while (received_bytes != bytes_to_receive);


                strcpy(Str, st->str);
                Data = st->data;
                printf("Length: %s\n", Str);
                printf("data : %ld\n", Data);
            }

我认为字符串必须在发送前序列化,并在接收时反序列化,问题是我不知道如何。有人可以帮助我吗?先谢谢!

提问于
用户回答回答于

我认为你应该发布完整的代码,因为还是不太清楚。

首先是你在Unix下?

在您使用的sock初始化为0 的客户端上:您是否正在更改它以便为服务器创建套接字?

您正在执行TCP或UDP连接吗?在第一种情况下你是连接到服务器(在Unix下通过调用connect)?

在服务器中,您首先要调用bind以指定端口-IP对,然后再listen开始执行服务器。

请在您的问题中添加信息。

扫码关注云+社区

领取腾讯云代金券