【发布时间】:2016-03-07 04:32:28
【问题描述】:
服务器:
int main(int argc, char *argv[]) {
struct sockaddr_in client, server;
int s, i=0;
socklen_t n;
char buf[31];
s=socket(AF_INET,SOCK_DGRAM,0);
server.sin_family=AF_INET;
server.sin_port=atoi(argv[1]);
inet_pton(AF_INET, "localhost", &(server.sin_addr));
bind(s,(struct sockaddr *)&server,sizeof(server));
n=sizeof(client);
while(1) {
recvfrom(s, buf, sizeof(buf), 0, (struct sockaddr *)&client, &n);
printf("%s", buf);
}
close(s);
return 0;
}
客户:
int main (int argc, char *argv[]) {
struct sockaddr_in client, server;
int s;
socklen_t n;
char buf[31];
char data[23];
s=socket(AF_INET,SOCK_DGRAM,0);
server.sin_family=AF_INET;
server.sin_port=atoi(argv[2]);
inet_pton(AF_INET, argv[1], &(server.sin_addr));
n=sizeof(server);
while(1) {
data[0] = 't';
data[1] = 'e';
data[2] = 's';
data[3] = '\0';
sendto(s, data, strlen(data), 0, (struct sockaddr *) &server, n);
}
close(s);
return 0;
}
当使用 gcc 而不是 g++ 编译时,这工作得非常好。由于我想使用单独的 C++ 类文件,所以这些需要在 g++ 中编译。
我错过了什么?
【问题讨论】:
-
你真的应该包括 g++ 错误
-
如果您将代码编译为 C,则编译器对类型更宽松。 C++ 在类型方面更严格,你不能使用例如指向一种类型的指针作为指向另一种类型的指针而不进行强制转换,在某些情况下,C 中可能不需要。
-
+058 094 041 程序可以编译,但没有数据通过客户端-服务器传输。
-
顺便说一下,您不会将端口号转换为网络字节顺序。您需要使用
htons将端口号从主机字节顺序转换为网络字节顺序。 -
您也有 未定义的行为,因为您没有将字符串终止符发送到“服务器”,但它会将接收到的数据视为字符串。