0

クライアントがサーバーにメッセージを送信できるように、クライアントをサーバーに接続しようとしています。これが私のコードです

サーバ

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <time.h>
#include <stdio.h>
#include <strings.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
  int connfd, listenfd, tmp, sin_size;
  struct sockaddr_in servaddr, client;
  char message[100];
  servaddr.sin_family = AF_INET;
  servaddr.sin_addr.s_addr = INADDR_ANY;
  servaddr.sin_port = htons(13);
  bzero(&servaddr, sizeof(servaddr));

  listenfd = socket(AF_INET,SOCK_STREAM,0);
  if(listenfd == -1)
  {
    printf("Error create socket\n");
    exit(1);
  }

  tmp = bind(listenfd, (struct sockaddr*)&servaddr, sizeof(struct sockaddr));
  if(tmp == -1)
  {
    printf("Error binding\n");
    exit(1);
  }

  listen(listenfd,2);

  sin_size = sizeof(client);
  connfd = accept(listenfd, (struct sockaddr*)&client, &sin_size);
  if(connfd == -1)
  {
    printf("Error accept\n");
    exit(1);
  }
  bzero(&message, sizeof(message));
  read(connfd, &message, sizeof(message));
  write(connfd, message, sizeof(message));
  close(connfd);
  close(listenfd);

}

クライアント

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char **argv)
{
  int connfd, listenfd;
  int port = atoi(argv[2]);
  char message[100];

  listenfd = socket(AF_INET,SOCK_STREAM,0);
  if(listenfd == -1)
  {
    printf("Error create socket\n");
    exit(1);
  }
  struct sockaddr_in servaddr;

  bzero(&servaddr, sizeof(servaddr));
  servaddr.sin_family = AF_INET;
  servaddr.sin_port = htons(port);
  servaddr.sin_addr.s_addr = inet_addr(argv[1]); 

  connfd = accept(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr));
  if(connfd == -1)
  {
    printf("Error accept\n");
    exit(1);
  }
  bzero(&message, sizeof(message));
  printf("Input kata: ");
  scanf("%[^\n]",message);
  getchar();
  write(listenfd, &message, sizeof(message));
  read(listenfd, &message, sizeof(message));

  close(listenfd);
}

サーバー (./server 8000) をコンパイルして実行しましたが、クライアントが接続するのを待っています。そこでコンパイルしようとすると、この部分でエラーが発生しました

connfd = accept(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr));

それは言う

warning: passing argument 3 of ‘accept’ makes pointer from integer without a cast [enabled by default]
/usr/include/x86_64-linux-gnu/sys/socket.h:214:12: note: expected ‘socklen_t * __restrict__’ but argument is of type ‘long unsigned int’

修正するにはどうすればよいですか?

4

1 に答える 1