Cでネットワークプログラミングを学び始めたばかりですが、いくつかのテストを行いましたが、エラーが発生しました。私は、サーバーを起動するとC - 最初のrecv()コールの後に "トランスポートエンドポイントが接続されていません"
server.c
#include <string.h>
#include <netdb.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define MYPORT "5996"
#define BACKLOG 10
int main(void)
{
struct sockaddr_storage their_addr;
socklen_t addr_size;
struct addrinfo hints, *res;
int sockfd, new_fd;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
getaddrinfo(NULL, MYPORT, &hints, &res);
sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
bind(sockfd, res->ai_addr, res->ai_addrlen);
listen(sockfd, BACKLOG);
addr_size = sizeof their_addr;
new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &addr_size);
char *msg = "Hello World!!";
int len = strlen(msg);
int bs = send(new_fd, msg, len, 0);
close(sockfd);
}
:
いるclient.c
#include <string.h>
#include <netdb.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
int main(void)
{
struct addrinfo hints, *res;
int sock;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
getaddrinfo("localhost", "5996", &hints, &res);
sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
connect(sock, res->ai_addr, res->ai_addrlen);
char data[64];
int len = 13;
int br = recv(sock, data, len, 0);
printf("%s\n%s\n%d\n", strerror(errno), data, br);
return 0;
}
とサーバー:
私はクライアントを持っています、それは待つ接続のために、私は "Hello World !!"というメッセージが表示されますが、1分ほどでサーバーを実行してからクライアントを再起動しようとすると、メッセージが表示されます"トランスポートエンドポイントが接続されていません。 "strerror()コール。
私はこれについて他の質問を読んだが、問題はデータがから返されたソケットに送信されるべきだったということだ。accept()呼び出し...しかし、私はそれをやっていると思う。 私は何が間違っていますか? ...私はそれが何かばかげたことを知っていますが、私は本当の初心者です。
接続に失敗した場合に 'connect()'の戻り値をチェックし、 'errno'を見てください。 –
あなたの記事の最後の段落ありがとう! :)私は完全に私は私のコードでこれを間違って逃した! –