我需要帮助,我需要发送一个使用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);
}
我认为字符串必须在发送前序列化,并在接收时反序列化,问题是我不知道如何。有人可以帮助我吗?先谢谢!
发布于 2018-12-17 10:44:40
我认为你应该发布完整的代码,因为还是不太清楚。
首先是你在Unix下?
在您使用的sock
初始化为0 的客户端上:您是否正在更改它以便为服务器创建套接字?
您正在执行TCP或UDP连接吗?在第一种情况下你是连接到服务器(在Unix下通过调用connect
)?
在服务器中,您首先要调用bind
以指定端口-IP对,然后再listen
开始执行服务器。
请在您的问题中添加信息。
https://stackoverflow.com/questions/-100006298
复制相似问题