2012-12-10 66 views
0

我将连接到不同平台的PC: 带窗口的PC我在cygwin和MAC中使用gcc编译程序我使用gcc在终端编译。客户端服务器udp mac与windows

我尝试从网络上的程序; 当我尝试窗口作为客户端和Mac作为服务器,Windows可以发送和MAC可以接收。 但是当我尝试window作为服务器和mac作为客户端时,我认为可以发送(因为终端中有OK和socket关闭的词)但窗口无法接收。

这里是我的程序: 服务器:

#include <stdlib.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <errno.h> 
#include <string.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
/* the port users will be connecting to */ 
#define MYPORT 4950 
#define MAXBUFLEN 500 //13 

int main(int argc, char *argv[]) 
{ int sockfd; 
/* my address information */ 
struct sockaddr_in my_addr; 
/* connector’s address information */ 
struct sockaddr_in their_addr; 
int addr_len, numbytes; 
char buf[MAXBUFLEN]; 

    if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) 
{ 
    perror("Server-socket() sockfd error lol!"); 
    exit(1); 
} 
else 
    printf("Server-socket() sockfd is OK...\n"); 

/* host byte order */ 
my_addr.sin_family = AF_INET; 
/* short, network byte order */ 
my_addr.sin_port = htons(MYPORT); 
/* automatically fill with my IP */ 
my_addr.sin_addr.s_addr = INADDR_ANY; 
/* zero the rest of the struct */ 
memset(&(my_addr.sin_zero), '\0', 8); 

if(bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) 
{ 
    perror("Server-bind() error lol!"); 
    exit(1); 
} 
else 
    printf("Server-bind() is OK...\n"); 

addr_len = sizeof(struct sockaddr); 

if((numbytes = recvfrom(sockfd, buf, MAXBUFLEN-1, 0, (struct sockaddr *)&their_addr, &addr_len)) == -1) 
{ 
    perror("Server-recvfrom() error lol!"); 
    /*If something wrong, just exit lol...*/ 
    exit(1); 
} 
else 
{ 
    printf("Server-Waiting and listening...\n"); 
    printf("Server-recvfrom() is OK...\n"); 
} 

printf("Server-Got packet from %s\n", inet_ntoa(their_addr.sin_addr)); 
printf("Server-Packet is %d bytes long\n", numbytes); 
buf[numbytes] = '\0'; 
printf("Server-Packet contains \"%s\"\n", buf); 

if(close(sockfd) != 0) 
    printf("Server-sockfd closing failed!\n"); 
else 
    printf("Server-sockfd successfully closed!\n"); 
return 0; 
} 

和客户端:

/*senderprog.c - a client, datagram */ 
#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <errno.h> 
#include <string.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <netdb.h> 
/* the port users will be connecting to */ 
#define MYPORT 4950 

int main(int argc, char *argv[ ]) 
{ 
int sockfd; 
/* connector’s address information */ 
struct sockaddr_in their_addr; 
struct hostent *he; 
int numbytes; 

if (argc != 3) 
{ 
    fprintf(stderr, "Client-Usage: %s <hostname> <message>\n", argv[0]); 
    exit(1); 
} 
/* get the host info */ 
if ((he = gethostbyname(argv[1])) == NULL) 
{ 
    perror("Client-gethostbyname() error lol!"); 
    exit(1); 
} 
else 
    printf("Client-gethostname() is OK...\n"); 

if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) 
{ 
    perror("Client-socket() error lol!"); 
    exit(1); 
} 
else 
    printf("Client-socket() sockfd is OK...\n"); 

/* host byte order */ 
their_addr.sin_family = AF_INET; 
/* short, network byte order */ 
printf("Using port: 4950\n"); 
their_addr.sin_port = htons(MYPORT); 
their_addr.sin_addr = *((struct in_addr *)he->h_addr); 
/* zero the rest of the struct */ 
memset(&(their_addr.sin_zero), '\0', 8); 

if((numbytes = sendto(sockfd, argv[2], strlen(argv[2]), 0, (struct sockaddr *)&their_addr, sizeof(struct sockaddr))) == -1) 
{ 
    perror("Client-sendto() error lol!"); 
    exit(1); 
} 
else 
    printf("Client-sendto() is OK...\n"); 

printf("sent %d bytes to %s\n", numbytes, inet_ntoa(their_addr.sin_addr)); 

if (close(sockfd) != 0) 
    printf("Client-sockfd closing is failed!\n"); 
else 
    printf("Client-sockfd successfully closed!\n"); 
return 0; 
} 

不要任何人有一些解决方案?

方面 5V

+0

我解决了这个问题,我是傻不关闭火线 – Limavolt

+0

可以请你指导我,我的问题的http://计算器。 COM /问题/ 42500940 /如何对广播话筒音频通过-UDP网络 –

回答