Cでサーバ/クライアントシステムを作成しようとしていますが、クライアントの部分で少し問題があります。私が見たことから、サーバーに接続できるようにsockaddr_inを使用する必要があります。しかし、私は毎回セグメンテーションを受けてきました。私はsockaddr_inがそれと関係があると信じています。そして、それはプログラムの後の参照でsegfaultを修正します。sockaddr_inはsegfaultを引き起こしますか?
コード:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <netinet/in.h>
int main(int argc, char** argv)
{
int Csock;
int con;
char *data = 0;
char buf[101] = "";
struct sockaddr_in addr;
Csock = socket(AF_INET, SOCK_STREAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(3435);
con = connect(Csock, (struct sockaddr*) &addr, sizeof(addr));
write(con, "Text", sizeof("Text"));
*data = read(con, buf, 100);
puts(data);
return 0;
}
悲しいことに、私はCにかなり新しいですので、それは私が理解することができますできるだけ多くの...誰も私にセグメンテーションフォルトを排除することについて移動するための方法を伝えることができますか?
ありがとうございます!
私は適切な答えを書く時間がなかったので、ここでいくつかのエラーを追加します: 'struct sockaddr_in addr;'は初期化されていません、最も重要なのは接続するIPアドレスが設定されていないことです。 '* data = read(con、buf、100);' NULLポインタを逆参照し、その型も同じではない。 'connect/write/read'はエラーをチェックするべきです(実際にどれくらい読み書きしたか) – nos