服务器收不到客户端成功发送的消息

时间:2021-07-23 04:49:00

标签: c sockets server udp

我是套接字编程的新手,通过一些教程的帮助,我想出了一个非常基本的应用程序,但我在让服务器接收消息时遇到了问题。

我的基本理解是在服务器端,您打开一个绑定端口/IP 的套接字(在 INADDR_ANY 的情况下,绑定到任何 IP 的任何套接字都应该能够连接)。< /p>

在客户端,您也创建了一个套接字并尝试连接到指定的 IP(在本例中我选择了 google 的公共 IP)。这意味着服务器应该能够监听来自客户端套接字的数据包。

pthread_t tid[2];

char buffer[100];

void serverThread(void)
{   
    struct sockaddr_in  serverAddr, clientAddr;

    memset(&serverAddr, 0, sizeof(serverAddr));
    memset(&clientAddr, 0, sizeof(clientAddr));

    int socketFd = socket(AF_INET, SOCK_DGRAM, 0);
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = htons(7799);
    serverAddr.sin_addr.s_addr = INADDR_ANY; 

    memset(serverAddr.sin_zero, '\0', sizeof(serverAddr.sin_zero));

    // bind the struct to the socket
    if (bind(socketFd, (struct sockaddr*) &serverAddr, sizeof(serverAddr)) < 0)
    {
      printf ("bind failed!\n");
    }

    int clientLen = sizeof(clientAddr); 

    while(1)
    {
      printf ("waiting for data by the client...\n");
      recvfrom(socketFd, buffer, 100, MSG_WAITALL, (struct sockaddr*) NULL, NULL);
      printf ("Client data rcvd: %s\n", buffer);
    }
}

void clientThread()
{ 
  char msg[1000];
  printf ("client thread...\n");

  struct sockaddr_in serverAddr;

  memset(&serverAddr, 0, sizeof(serverAddr));
  
  // open a socket over which requests will be sent to the server
  int socketFd = socket(AF_INET, SOCK_DGRAM, 0);
  serverAddr.sin_family = AF_INET;
  serverAddr.sin_port = htons(7799);
  serverAddr.sin_addr.s_addr = inet_addr("142.251.33.78");

  memset(serverAddr.sin_zero, '\0', sizeof(serverAddr.sin_zero));

  // connect the socket to the server 
  if (connect(socketFd, (struct sockaddr *) &serverAddr, sizeof(serverAddr)) < 0)
  {
    printf ("connect error\n");
  }
  printf ("Connected to server...\n");
  strcpy(msg, "Hello world!");

  if(sendto(socketFd, msg, strlen(msg), 0, NULL, 0) < 0){
        printf("Unable to send message\n");
  }
  printf ("Message sent from client...\n");
}

int main() 
{
    int sockfd;
    char buffer[MAXLINE];

    pthread_create(&tid[0], NULL, serverThread, NULL);
    pthread_create(&tid[1], NULL, clientThread, NULL);

    pthread_join(tid[0], NULL);
    pthread_join(tid[1], NULL);
    
    return 0;
}

输出:

server thread...
client thread...
waiting for data by the client...
Connected to server...
Message sent from client...

0 个答案:

没有答案