소켓 프로그래밍시 손을 잡으려고하는데 필자가 작성한 프로그램을 작성할 수 없기 때문에 도움이 필요합니다. 내가 어떤 소켓 응용 프로그램을 빌드하려고 할 때마다, 컴파일러는 다음 오류를보고합니다socket.h (_uid32_t) error
error: expected specifier-qualifier-list before '_uid32_t'
이 변수가 차례로 헤더 파일 "socket.h '에 위치한 구조체 내부에 있으며, 다음과 같습니다 :
struct ucred {
pid_t pid;
__uid32_t uid;
__gid32_t gid;
};
다른 파일에는 다른 오류가 없으며 이것은 컴파일러에서 반환하는 유일한 오류입니다.
이것이 어떤 결과인지는 모르겠지만, 가이드 및 튜토리얼이 유닉스 소켓에 있고 Windows XP를 실행하고 있기 때문에 헤더 파일이 cygwin과 함께 제공됩니다. 또한 Code :: Blocks를 사용하여 gcc 컴파일러를 실행합니다.
Windows에서 유닉스 소켓 API를 사용하여 프로그램을 실행할 수 있기를 정말로 바랄뿐입니다. 왜냐하면 저는 스스로를 winsock에만 국한시키는 것을 정말 싫어하기 때문입니다. 또한 소켓과 네트워크 프로그래밍에 관한 무료로 사용 가능한 포괄적 인 자습서의 대부분은 유닉스 소켓을 사용합니다.
여기에 코드가 있지만 실제로는 문제가 아니라고 생각합니다. socket.h을 사용하는 한 아무런 프로그램과 똑같은 오류가 발생하기 때문입니다.
#include <stdio.h>
#include <string.h>
#include <sys\types.h>
#include <sys\socket.h>
#include <netdb.h>
#include <arpa\inet.h>
int main(int argc, char *argv[])
{
struct addrinfo hints, *res, *p;
int status;
char ipstr[INET6_ADDRSTRLEN];
if (argc != 2)
{
fprintf(stderr, "Usage: showip hostname\n");
return 1;
}
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;//AF_INET or AF_INET6 to force version
hints.ai_socktype = SOCK_STREAM;
if ((status = getaddrinfo(argv[1], NULL, &hints, &res)) != 0)
{
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(status));
return 2;
}
printf("IP addresses for %s:\n\n", argv[1]);
for (p = res; p != NULL; p = p ->ai_next)
{
void *addr;
char *ipver;
//get the pointer to the address itself
//different fields in IPv4 and IPv6:
if (p ->ai_family == AF_INET)
{
//IPv4
struct sockaddr_in *ipv4 = (struct sockaddr_in *)p ->ai_addr;
addr = &(ipv4 ->sin_addr);
ipver = "IPv4";
}
else//IPv6
{
struct sockaddr_in *ipv6 = (struct sockaddr_in6 *)p ->ai_addr;
ipver = "IPv6";
}
//convert the IP to a string and print it;
inet_ntop(p ->ai_family, addr, ipstr, sizeof ipstr);
printf(" %s: %s\n", ipver, ipstr);
}
freeaddrinfo(res);//free linked list
return 0;
}
가 내가 추가 할 수있는 다른 프로그램에서 다른 소스 코드이기도하지만 사람이 here를를 검색 할 수 있도록 내가 교과서를 인터넷에서 그것을 가지고하지 때문에 내가 대신 하나를 선택했다.
include 문에 역 슬래시를 수정하십시오 ... –