클라이언트가 서버에 문자를 보내는 간단한 C UDP 클라이언트 및 서버를 작성했습니다. 모든게 똑같은 PC에서 잘 작동합니다. 그래서 저는 원격 PC에 인물을 보내고 싶었습니다. 불행히도 서버가 작동하지 않습니다. 서버는 wireshark를 사용하여 아무것도 수신하지 못하고 있습니다. 패킷이 올바른 대상으로 전달되고 있음을 알 수 있습니다. (servip 서버의 주소를 포함)C 원격 호스트의 UDP 클라이언트 및 서버
//client
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
#define SERV_PORT 50000
int main(){
int id, s;
char buf;
char servip[] = "...";
id = socket(AF_INET,SOCK_DGRAM,0);
buf = 'a';
struct sockaddr_in servaddr;
memset((void *)&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
inet_pton(AF_INET,servip, &servaddr.sin_addr); //controlla se minore di 0
s = sendto(id,&buf,sizeof(char),0,(struct sockaddr *) &servaddr,sizeof(servaddr));
if (s == 0)
fprintf(stderr,"errore in sendto");
return EXIT_SUCCESS;
}
//server
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define SERV_PORT 50000
int main(){
int id, s;
unsigned int len;
char buf;
id = socket(AF_INET,SOCK_DGRAM, 0);
struct sockaddr_in addr;
memset((void *)&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY); /* il server accetta pacchetti su
una qualunque delle sue interfacce di rete */
addr.sin_port = htons(SERV_PORT); /* numero di porta del server */
len = sizeof(addr);
bind(id, (struct sockaddr *) &addr, sizeof(addr));
s = recvfrom(id,&buf,sizeof(char),0,(struct sockaddr *) &addr,&len);
printf("%c\n",buf);
if (s==0)
fprintf(stderr,"errore in recvfrom");
return EXIT_SUCCESS;
}
아무도 도와 줄 수 : 여기
코드인가? 내가 도대체 뭘 잘못하고있는 겁니까? 실제로 원격 호스트에서 작동하는 UDP 서버와 클라이언트의 예를 링크 해 주시겠습니까? 미리 감사드립니다.
서버 IP로 무엇을 넣으시겠습니까? 이 원격 호스트는 어디에 있습니까? 메시지를 보내려는 호스트에서 원격 호스트로 핑 (ping) 할 수 있습니까? – Rush
- 서버 IP로, whatsmyip.org에서 제공 한 IP를 사용합니다. - 기본적으로 내 PC를 서버로 사용하고 그의 친구의 PC를 클라이언트로 사용합니다. - 원격 호스트에 ping을 시도하지 않았습니다. 잠시 후 제안에 감사드립니다. – Simus