読者です 読者をやめる 読者になる 読者になる

TCP通信プログラム

プログラム
サーバー側とクライアント側でそれぞれ作りました。
ほんとお粗末なソースコードですが載せておくので、質問訂正等あればコメントか
palloc.mknet10(at)gmail.com
までメール飛ばしてください。
※私も勉強中のため、質問されてもわからないかもしれません、許してorz

〜サーバ側ソースコード
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>

int main(void){
  int sock0;
  struct sockaddr_in addr;
  struct sockaddr_in client;
  int len;
  const char *str;
  int sock;
  sock0=socket(AF_INET,SOCK_STREAM,0);//socketの作成
  //error check
  if(sock0<0){
    perror("sock0:");
    return -1;
  }
 
  addr.sin_family=AF_INET;//プロトコルファミリ(TCPを設定)
  addr.sin_port=htons(12345);//port number
  addr.sin_addr.s_addr=INADDR_ANY;//IP Adress(特に指定しない)
  bind(sock0,(struct sockaddr *)&addr,sizeof(addr));//ソケットの返り値(ディスクリプタ)、socketの先頭アドレス、socketの大きさ
  listen(sock0,5);//待ち受け状態にする(ソケットバッファのキューを作成する)
 
  while(1){
    len=sizeof(client);
    sock=accept(sock0,(struct sockaddr *)&client,&len);
    write(sock,"what's up!?",sizeof("what's up!?"));
    close(sock);
  }
  fclose(f);
 close(sock0);

  return 0;
}



〜クライアント側ソースコード
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main()
{
  int sock;
  struct sockaddr_in server;
  char buf[32];//受け取る文字列
  int n;//返ってきたサイズの大きさ
  sock=socket(AF_INET,SOCK_STREAM,0);//socket作成

  server.sin_family=AF_INET;//TCPを設定
  server.sin_port=htons(12345);//port number
  server.sin_addr.s_addr=inet_addr("127.0.0.1");//IPAdress(今は自分に設定)

  connect(sock,(struct sockaddr *)&server,sizeof(server));//サーバーに接続

  memset(buf,0,sizeof(buf));//配列の初期化
  n=read(sock,buf,sizeof(buf));
  printf("%d,%s\n",n,buf);
 
  close(sock);

  return 0;
}


簡単に説明すると、クライアントから接続がきたら"what's up!?"という文字列を返すプログラムです。
クライアント側で最後に
↑で設定しているポート番号はサーバのポート番号で、クライアント側のポート番号ではありません。

ちなみにクライアント側で通信先のIPアドレス127.0.0.1としていて、これはNICに元々設定されてる自分を示すアドレスです。


ここで使っている関数のリファレンスのようなものを作って次回載せたいと思います。しばしお待ちを・・・