アプリ版:「スタンプのみでお礼する」機能のリリースについて

前回のクライアント側のプログラムが違ったため
再度どこが違うか教えてください。
最終的にはクライアント側のipアドレス部を変更して2つのPCで通信させたいと思っています。

以下エラー分
1
./server.c: 行 12: 予期しないトークン `(' 周辺に構文エラーがあります
2
./client.c: 行 9: 予期しないトークン `(' 周辺に構文エラーがあります
どちらもmain前に出ています。

1サーバー

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

#define PORT 3000

int main()
{
int fd_socket, fd_accept;
socklen_t len;
struct sockaddr_in addr;
char buff[BUFSIZ];

if ((fd_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("server: socket");
return 1;
}
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_port = htons(PORT);
if (bind(fd_socket, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
perror("server:bind");
return 1;
}
if(listen(fd_socket, 5) == -1) {
perror("server:listen");
return 1;
}
if((fd_accept = accept (fd_socket,
(struct sockaddr *)&addr, &len)) == -1) {
perror("server: accept");
return 1;
}
if (read(fd_accept, buff, BUFSIZ) == -1) {
perror("server:read");
return 1;
}
strcat(buff, "is received message.");
if (write(fd_accept, buff, strlen(buff) + 1) == -1) {
perror("server:write");
return 1;
}
close(fd_accept);
close(fd_socket);
return 0;
}

2クライアント文
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#define PORT 3000
int main(int argc, char *argv[]){
int fd_socket;
struct sockaddr_in addr;
char buff[BUFSIZ];

if ((fd_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("client: socket");
return 1;
}
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_port = htons(PORT);
if(connect(fd_socket, (struct sockaddr *)&addr, sizeof(addr)) == -1){
perror("client: connect");
return 1;
}
if(write(fd_socket, argv[1] , strlen(argv[1]) + 1) ==-1){
perror("client: write");
return 1;
}
if(read(fd_socket, buff, BUFSIZ) == -1){
perror("client: read");
return 1;
}
printf("message from server: %s\n", buff);
close(fd_socket);
return 0;
}

質問者からの補足コメント

  • linux環境で
    ディレクトリを移動し
    gcc ./server.c
    gcc ./client.c
    と動かしました。
    上記コンパイルはうまくいきました。

    次に
    ./server.c &
    ./client.c Hello
    と実行すると上記のエラーが出てきます。

      補足日時:2022/02/09 12:02

A 回答 (3件)

コンパイルは


gcc -o server ./server.c
gcc -o client ./client.c
と入力してください。
正常終了すると、実行モジュールのserverとclientが作成されます。

実行は
./server
./client Hello
と入力してください。
./server.c とソースファイルを指定してはいけません。
    • good
    • 0
この回答へのお礼

助かりました

できました!!
本当にありがとうございます♪

お礼日時:2022/02/09 13:18

どのような環境で、どのようにコンパイルされたのでしょうか。



例: linux環境でソース(server.c,client.c)のあるディレクトリに移動し、
gcc ./client.c と入力した。

のような補足を期待しています。
    • good
    • 0
この回答へのお礼

ありがとうございます!
補足させていただきました。

お礼日時:2022/02/09 12:03

上記のソースをコピペして、コンパイルしましたが、2つとも正常終了しています。


あなたがなにか、ほかのソースをコンパイルしているようにも見えます。
コンパイルしたのは、
./server.c
./client.c
で間違いないですか。
アップされたソースも、上記で間違いないですか。

エラーメッセージが、前回の投稿
https://oshiete.goo.ne.jp/qa/12796887.html
と全く同じです。今回、ソースが変わったように見えません。
./client.cはソースを比較すると前回と違っていますが、同じ行で同じ内容のエラーメッセージがでています。
    • good
    • 0
この回答へのお礼

再度ご回答ありがとうございます。
./server.cと./client.cをコンパイルしました。
変更があるのはclient.cのみです。
実行しても同じエラーが出ます。

お礼日時:2022/02/09 11:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!