这里client1和服务器以UDP连接。现在客户端1将数据发送到服务器。服务器接收数据并向客户端1发送确认。现在我想将此接收的数据在服务器中发送给另一个客户端2.
请建议如何做到这一点?什么需要改变。 提前谢谢你:)
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
void error(char *msg)
{
perror(msg);
exit(0);
}
void error(char *msg)
{
perror(msg);
exit(0);
}
int main(int argc, char *argv[])
{
int sock, length, fromlen, n;
struct sockaddr_in server;
struct sockaddr_in from;
char buf[1024];
if (argc < 2)
{
fprintf(stderr, "ERROR, no port provided\n");
exit(0);
}
sock=socket(AF_INET, SOCK_DGRAM, 0);
if (sock < 0)
{
error("Opening socket");
}
length = sizeof(server);
bzero(&server,length);
server.sin_family=AF_INET;
server.sin_addr.s_addr=INADDR_ANY;
server.sin_port=htons(atoi(argv[1]));
if (bind(sock,(struct sockaddr *)&server,length)<0)
{
error("binding");
}
fromlen = sizeof(struct sockaddr_in);
while (1)
{
n = recvfrom(sock,buf,1024,0,(struct sockaddr *)&from,&fromlen);
if (n < 0)
{
error("recvfrom");
}
write(1,"Received a datagram: ",21);
write(1,buf,n);
strcpy(data, buf);
write(1,data,n);
n = sendto(sock,"server received data\n",17,0,(struct sockaddr*)&from,fromlen);
if (n < 0)
{
error("sendto");
}
}
}
答案 0 :(得分:0)
将其视为代理服务器;接收来自客户端的请求并将其传递给服务器,从服务器接收响应并将其传递给客户端。你需要两个插座,从&#34; client1&#34;接收数据。通过socket1传递它&#34; client2&#34;通过socket2。这里需要注意的一点是你所谓的&#34; client2&#34;实际上是&#34; server2&#34;从服务器接收数据。你的服务器&#34;作为&#34; client1&#34;的服务器。并充当&#34;客户&#34; for&#34; server2&#34;。它可能看起来令人困惑,将其视为一端作为服务器而另一端作为客户端的机器。