gpt4 book ai didi

c - 错误: struct sockaddr_un' has no member named 'sun_port'

转载 作者:行者123 更新时间:2023-11-30 20:21:01 25 4
gpt4 key购买 nike

我在尝试创建一个简单的 unix 套接字程序时遇到一些错误。到目前为止,我的服务器程序已经可以运行了。我正在尝试编写一个程序,让客户端重复发送消息到服务器程序,然后服务器将显示它们。我打开了两个编译器窗口来测试这一点。我收到一些错误,我认为这些错误与头文件或 UNIX 特定内容有关。我尝试使用“sun_addr”而不是“sin_addr”(对于unix),但它不起作用。

错误...(在将所有内容更改为“UN”而不是“IN”后编辑)

error:'struct sockaddr_un' has no member named 'sun_port'

代码...

   #include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/un.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>

#define LEN 256
#define SOCKET_NAME "client_socket"

int main(void)
{
char message[LEN];
int sock;
struct sockaddr_un server_socket;
char server_reply[LEN];

//create af_unix/socket stream w/call to socket func
sock = socket(AF_UNIX , SOCK_STREAM , 0);
if(sock == -1)
{
perror("Could not create socket");
}

puts("Socket created");

//errors and warnings here...
server_socket.sun_family = AF_UNIX;
server_socket.sun_port = htons( 8888 );//or use sun_path?

if(connect(sock ,(struct sockaddr *)&server_socket, sizeof(server_socket))
<0)
{
perror("Connect failed.");
return 1;
}

puts("Connected\n");

while(1)
{
printf("Enter message : ");
scanf("%s" , message);

//Send some data
if( send(sock , message , strlen(message) , 0) < 0)
{
puts("Send failed");
return 1;
}

//Receive a reply from the server
if( recv(sock , server_reply , 2000 , 0) < 0)
{
puts("recv failed");
break;
}

puts("Server reply :");
puts(server_reply);
}

close(sock);
return 0;
}

最佳答案

这是 sockaddr_un 的定义,它没有任何像 sin_family 和其他报告错误的成员。

  struct sockaddr_un{
short sun_family; /*AF_UNIX*/
char sun_PATH[108]; /*path name */
};

您认为您正在使用的结构是这个

struct sockaddr_in {
short sin_family; /* AF_INET */
u_short sin_port; /* 16-bit port number */
struct in_addr sin_addr;
char sin_zero[8]; /* unused */
};

struct in_addr {
u_long s_addr; /*32-bit net id */
};

我认为您正在混合处理 AF_INET 和 AF_UNIX 等系列。下面是如何编写 AF_INET。

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define PORT 12345

int main()
{
struct sockaddr_in addr;
int fd;

fd = socket(AF_INET, SOCK_STREAM, 0);
if(fd == -1)
{
printf("Error opening socket\n");
return -1;
}

addr.sin_port = htons(PORT);
addr.sin_addr.s_addr = 0;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_family = AF_INET;

if(bind(fd, (struct sockaddr *)&addr,sizeof(struct sockaddr_in) ) == -1)
{
printf("Error binding socket\n");
return -1;
}

printf("Successfully bound to port %u\n", PORT);
}

对于 AF_UNIX,您可以查看此示例和其他相关示例 Client/Server Socket Communication (AF_UNIX)

关于c - 错误: struct sockaddr_un' has no member named 'sun_port' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44041814/

25 4 0