내 네트워킹은 그리 좋지는 않지만 이것을 알아 내려고합니다.UDP를 통해 데이터를 받고 TCP로 전송
UDP를 통해 데이터를 수신 한 다음 TCP를 통해 다른 서버로 데이터를 보낼 수 있습니까?
그래서 UDP 클라이언트와 같은 것 ->(받으십시오 UDP 데이터 그램) 프록시 (TCP 패킷을 보내기) -> TCP 서버
내 네트워킹은 그리 좋지는 않지만 이것을 알아 내려고합니다.UDP를 통해 데이터를 받고 TCP로 전송
UDP를 통해 데이터를 수신 한 다음 TCP를 통해 다른 서버로 데이터를 보낼 수 있습니까?
그래서 UDP 클라이언트와 같은 것 ->(받으십시오 UDP 데이터 그램) 프록시 (TCP 패킷을 보내기) -> TCP 서버
나는 UDP 서버처럼 행동에 문제가 표시되지 않으며 TCP 클라이언트가 동시에
처음에는 TCP 서버와의 연결을 설정해야합니다 (리다이렉트 할 곳이 없다면 UDP 데이터 그램이 필요하지 않기 때문에).
sockaddr_in udp_remote_address; // this is the adrees of 'UDP Client'
udp_remote_address.sin_addr.s_addr = inet_addr(udp_client_ip);
udp_remote_address.sin_port = htons(udp_client_port);
udp_remote_address.sin_family = PF_INET;
char buffer[9016];
const int read_size = recvfrom(udp_socket, buffer, 9016, 0, (SOCKADDR*)&udp_remote_address, sizeof(udp_remote_address));
if(read_size > 0)
{
if(send(tcp_socket, buffer, read_size, NULL) == SOCKET_ERROR)
{
// WSAGetLastError();
}
}
: 지금 당신은 UDP 소켓에서 데이터 그램을 수신하고 TCP 소켓에 보낼 단지 필요, 그래서
SOCKET udp_socket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
sockaddr_in udp_local_address; // this is your local address for receiving datagrams
udp_local_address.sin_addr.s_addr = inet_addr(udp_proxy_ip);
udp_local_address.sin_port = htons(udp_proxy_port);
udp_local_address.sin_family = PF_INET;
if(bind(udp_socket, (SOCKADDR*)&udp_local_address, sizeof(udp_local_address)) == SOCKET_ERROR))
{
// WSAGetLastError()
return false;
}
다음 tcp_socket가 연결되면
SOCKET tcp_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
sockaddr_in tcp_address; // this is the address of 'TCP Server'
tcp_address.sin_addr.s_addr = inet_addr(tcp_server_ip);
tcp_address.sin_port = htons(tcp_server_port);
tcp_address.sin_family = PF_INET;
connect(tcp_socket, (SOCKADDR*)&tcp_address, sizeof(tcp_address));
, 우리는 UDP 소켓을 만들 수 있습니다
tcp_socket이 연결되어 있는지 확인하려면 해당 코드를 사용할 수 있습니다 (소켓이 쓰기 가능한지 여부를 확인합니다) :
const timeval tv = { 0, 0 };
fd_set fd;
FD_ZERO(&fd);
FD_SET(tcp_socket, &fd);
select(NULL, NULL, &fd, NULL, &tv);
if(FD_ISSET(tcp_socket, &fd))
{
}
TCP에 클라이언트 또는 서버가 없습니다. 이것은 피어 - 투 - 피어 프로토콜입니다. 클라이언트/서버 개념은 응용 프로그램 계층 개념입니다. –
UDP 클라이언트와 TCP 클라이언트를 한 곳에서 (프록시) 결합 할 때 어떤 문제점이 있습니까? – renzo
그것은 udp를 통해 데이터를 가져오고 있으며 프록시는 udp 서버처럼 작동하고 동일한 데이터를 tcp를 통해 다른 서버로 보냅니다. 나는 이것이 현재 가능하다는 것을 확신 할 수 없다. 나는 현재 매우 다른 데이터 레벨을보고있다. 그래서 udp에서 100 개의 메시지가 나오고 tcp보다 적습니다. 그러나 tcp in과 tcp를 사용하면 100 개의 메시지를 보게됩니다. 죄송합니다. 이것은 네트워킹 관련 항목에별로 좋지 않은 내용입니다. –