【发布时间】:2017-05-18 07:55:47
【问题描述】:
我在尝试制作一个简单的 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;
}
【问题讨论】:
-
您既想使用 UNIX 套接字,又想使用 IP 地址?
-
您是否在 sockaddr_un 中输错了 sockaddr_in?
-
UNIX 套接字不是网络套接字。
-
查看文档,具有 sin_family、sin_port 和 sin_addr 的结构是 sockaddr_in,如 netinet/in.h 中定义的,您没有包含它。*un* 是 Unix 套接字,in 是互联网地址。
-
@MikhailRomanko 我想是的。我把它们都改成了
_un 因为我搞砸了“in”。新错误是... client.c:30:16: error: 'struct sockaddr_un' has no member named 'sun_port'
标签: c unix unix-socket