创建第二个客户端以从服务器发送接收的数据

时间:2014-09-15 02:00:50

标签: c sockets udp

这里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 &lt; 2)
    {
        fprintf(stderr, "ERROR, no port provided\n");
        exit(0);
    }

    sock=socket(AF_INET, SOCK_DGRAM, 0);
    if (sock &lt; 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)&lt;0)
    {
        error("binding");
    }
    fromlen = sizeof(struct sockaddr_in);
    while (1)
    {
        n = recvfrom(sock,buf,1024,0,(struct sockaddr *)&from,&fromlen);
        if (n &lt; 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 &lt; 0)
        {
            error("sendto");
        }
    }
}

1 个答案:

答案 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;。它可能看起来令人困惑,将其视为一端作为服务器而另一端作为客户端的机器。

相关问题