我的网络不是很好,但试图弄清楚这一点。通过UDP接收数据并通过TCP发送
是否可以通过UDP接收数据,然后通过TCP发送到另一台服务器?
所以会像 UDP客户端 - >(收到UDP数据报)代理(发送TCP数据包) - > TCP服务器
我的网络不是很好,但试图弄清楚这一点。通过UDP接收数据并通过TCP发送
是否可以通过UDP接收数据,然后通过TCP发送到另一台服务器?
所以会像 UDP客户端 - >(收到UDP数据报)代理(发送TCP数据包) - > TCP服务器
我看不出像个UDP服务器任何问题, TCP客户端同时进行。首先,我们需要建立与TCP服务器的连接(因为你不需要UDP数据报,如果你没有地方重定向它,我猜)。
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));
的TCP_SOCKET连接后,我们可以创建UDP套接字:
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;
}
所以,现在你只需要从UDP套接字接收数据包,并将其发送到TCP套接字:
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();
}
}
要检查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和tcp out,则会看到100条消息。 对不起,如果这是简单的东西,不是很擅长网络的东西。 –