【发布时间】:2010-11-09 23:44:17
【问题描述】:
我正在尝试使用 C 将字符串发送到服务器应用程序,但遇到了障碍。我对网络编程还很陌生,我认为我的代码是错误的树。
消息应该是消息长度 + 消息,并且在另一端由 python 服务器解包(buf 是原始传入数据):
msg_len_bytes = buf[0:4]
msg_len = struct.unpack("!L", msg_len_bytes)[0]
!表示网络字节顺序,L 表示无符号长。
发送常规字符串相当简单。 发送(袜子,消息,strlen(消息),0);
但是添加消息长度我无法完全掌握。到目前为止,这是我的客户的代码:
struct msgstruct {
uint32_t length;
char send_data[4096];
};
int main()
{
int sock;
struct msgstruct message;
char data[4096] = "<MOP><test/></MOP>";
for ( int i = 0; i < strlen(data); i++ ) {
message.send_data[i] = data[1];
}
struct hostent *host;
struct sockaddr_in server_addr;
unsigned long buflen = sizeof(message.send_data);
uint32_t bufsend = htonl(buflen);
message.length = bufsend;
host = gethostbyname("127.0.0.1");
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("Socket");
exit(1);
}
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(12998);
server_addr.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(server_addr.sin_zero),8);
if (connect(sock, (struct sockaddr *)&server_addr,
sizeof(struct sockaddr)) == -1) {
perror("Connect");
exit(1);
}
if(send(sock, message.length + message.send_data, sizeof(message), 0) == -1){
printf("\nSocket error.");
exit(1);
}
return 0;
}
我尝试了一些变体,但总是以套接字错误告终。是因为我在发送的第二个争论中混合了类型吗?如果我尝试发送结构,我会收到编译错误。
【问题讨论】:
-
如果您对所提供的答案感到满意,请选择一个(我的!希望如此)作为带有复选标记的“正确答案”。值得 15 代表。指向我,并使这个问题在以后的参考中更有用。