1 #include <stdio.h>
2 #include <string.h>
3 #include <sys/types.h>
4 #include <sys/socket.h>
5 #include <netinet/in.h>
6 #include <arpa/inet.h>
7
8 int main(int argc, char *argv[])
9 {
10 struct sockaddr_in server;
11 char message[80], ip_address[16];
12 int fd;
13
14 strcpy(ip_address,argv[1]); // コマンドライン引数のIPアドレスのコピー
15 fd=socket(PF_INET, SOCK_STREAM, 0); // ソケットの作成
16
17 memset((char *) &server, 0, sizeof(server)); // アドレス構造体の初期化
18 server.sin_family=AF_INET;
19 server.sin_port = htons(5320);
20 server.sin_addr.s_addr=inet_addr(ip_address);
21 connect(fd, (struct sockaddr *) &server, sizeof(server));
22
23
24 while(1){
25 printf("message:");
26 fgets(message, 80, stdin);
27 if(strncmp(message,"bye",3)==0)break;
28 send(fd, message, strlen(message),0);
29 }
30
31 close(fd);
32
33 return 0;
34 }
1 #include <stdio.h>
2 #include <string.h>
3 #include <sys/types.h>
4 #include <sys/socket.h>
5 #include <sys/socket.h>
6 #include <netinet/in.h>
7 #include <arpa/inet.h>
8
9 int main(void)
10 {
11 struct sockaddr_in client, server;
12 char read_str[80];
13 int fds, fda, length;
14 fds=socket(PF_INET, SOCK_STREAM, 0);
15 memset((char *) &server, 0, sizeof(server));
16
17 server.sin_family=AF_INET;
18 server.sin_addr.s_addr = htonl(INADDR_ANY);
19 server.sin_port = htons(5320);
20 bind(fds, (struct sockaddr *) &server, sizeof(server));
21
22 listen(fds, 1);
23
24 length=sizeof(client);
25
26 fda=accept(fds, (struct sockaddr *) &client, &length);
27
28 while(1){
29 int rn;
30 rn = recv(fda, read_str, 80, 0);
31 printf("%d\n",rn);
32 printf("%s",read_str);
33 }
34
35 close(fda);
36 close(fds);
37
38 return 0;
39 }
のp.259-260に書いてある通り,通信のプログラムはファイルの
読み書きと似ている.ここでは述べないが,デバイス(キーボードなどの外部機器)との通
信もファイルの読み書きに似ている.コンピューターからみて,データを入出力するもの
は,すべてファイルとして取り扱われ,ほとんど同じ方法で読み書きができる.
通信を行うためには,通信相手のコンピューターとプログラムを特定しなくてはならない.
IPアドレスを指定することで,コンピューターを特定する.通信するプログラムはポート
番号により決める.コンピューターは多くの通信を同時に行っており,通信をするプログ
ラムまで指定しなくてはならない.