ページ 11

Cを使ってメール送信するプログラムを作りたいと考えています。

Posted: 2012年1月07日(土) 05:36
by ファイブマン
こんにちは。いつもここでお世話になっています。
今回、コマンドラインで

プログラム名 差出メールアドレス あて先メールアドレス テキストファイル メールサーバのIPアドレス

を入力することでメールサーバのIPアドレスへ接続して、宛先にテキストファイルの内容を送れるようにするプログラムを作りたいと思っています。
課題で出されたサンプルをもとに改変して、まずサーバに接続することに重点をおくようにし、ここまでやってみました。
最終的にはwriteやreadを使って、サーバからのメッセージを受信したり、送ったりとしたいのですが、今はまず接続を試みたいと思います。
サンプルをもとに書いたため、部分的に完全に理解していない関数を用いた部分もあるのですが、これから先がわかりません。

コード:

int sockaddr_in{
 sin_addr
}
に接続したいIPアドレスを格納する、というのを使用するようなのですが、自分で調べても、これから先はわかりませんでした。
この後何に着手すればよいのでしょうか。回答よろしくお願いします。

コード:

include<stdio.h>
#include<stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include<netinet/in.h>
#include <string.h>
#include <netdb.h>

#define SERVER_NAME "zenith.edu.ics.saitama-u.ac.jp"
#define ERR -1
#define BUFSIZE 1024

void usage(void);
char *command_name;
int socket(int domain, int type, int protocol);

int main(int argc, int argv[]){
  int sds;
  int write;
  int read;
  struct sockaddr_in server;
  struct hostent *hp;
  char buf[BUFSIZE];
  char servername = SERVER_NAME;


  if ((command_name = rindex(argv[0], '/')) != NULL)
    command_name++;
  else
    command_name = argv[0];

  if(argc != 1)
    usage(); 
  
  if((sds = socket(PF_INET, SOCK_STREAM, 0)) == ERR){
    perror("client: socket");
    exit(1);
  }
  
  memset((void*)&server, 0, sizeof(server));
  server.sin_family = PF_INET;
  server.sin_port = htons(25);
  if ((hp = gethostbyname(servername)) == NULL){
    perror("client : gethostbyname");
    exit(1);
  }

  memcpy(&(server.sin_addr), hp->h_addr_list[0], hp->h_length);

    return 0;
}

void usage(void)
{
\\  fprintf(stderr, "Usage: %s \n", command_name);
\\まだここは見搾取です。
  exit(1);
}

Re: Cを使ってメール送信するプログラムを作りたいと考えています。

Posted: 2012年1月07日(土) 07:33
by beatle
ファイブマン さんが書きました:

コード:

int sockaddr_in{
 sin_addr
}
に接続したいIPアドレスを格納する、というのを使用するようなのですが、自分で調べても、これから先はわかりませんでした。
ここにIPアドレスを入れると・・・
まずはC言語の基礎的な勉強からやり直すべきだと思うのですが.

Re: Cを使ってメール送信するプログラムを作りたいと考えています。

Posted: 2012年1月10日(火) 15:20
by ファイブマン
それはどういった意味ですか?

確かに、勉強不足であるため、一連の課題が終わったら再び勉強し直す予定です。

Re: Cを使ってメール送信するプログラムを作りたいと考えています。

Posted: 2012年1月10日(火) 15:35
by softya(ソフト屋)
C言語の文法的にありえない定義だからです。

コード:

int sockaddr_in{
 sin_addr
}
この書き方では関数でもないし、構造体でもないし、enumでもないです。

sys/socket.hとあるのでLinuxかUnixだと思うのですが、in.hにsin_addrは
struct in_addr sin_addr;
と定義してあるはずなのですが・・。

Re: Cを使ってメール送信するプログラムを作りたいと考えています。

Posted: 2012年1月10日(火) 15:57
by 沖 滉均
まず、自分でビルドしてみてますか?

Re: Cを使ってメール送信するプログラムを作りたいと考えています。

Posted: 2012年1月12日(木) 18:23
by ファイブマン
ご指摘ありがとうございました.
もう一度出直してきたいと思います.