先週と同じ,チャットプログラムをリスト1と
リスト2に示す.本日は,これを改造して,インターネット通信のプロ
グラムの学習を進める.
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("%s",read_str);
32 }
33
34 close(fda);
35 close(fds);
36
37 return 0;
38 }
ここでの通信は,以下の順序で行われている.
ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成19年12月11日