質問するログイン新規登録

質問編集履歴

3

追記

2021/09/15 17:40

投稿

abroad128
abroad128

スコア60

title CHANGED
File without changes
body CHANGED
@@ -84,4 +84,58 @@
84
84
  }
85
85
  }
86
86
  }
87
+ ```
88
+ 送信部もStreamWriterを使わずにこうすると成功します.
89
+ ```C#
90
+ using System;
91
+ using System.Collections.Generic;
92
+ using System.IO;
93
+ using System.Linq;
94
+ using System.Net.Sockets;
95
+ using System.Text;
96
+ using System.Threading.Tasks;
97
+
98
+ namespace ConsoleApp6
99
+ {
100
+ class Program
101
+ {
102
+ static void Main(string[] args)
103
+ {
104
+ var client = new TcpClient();
105
+ client.Connect("www.google.co.jp", 80);
106
+
107
+ var stream = client.GetStream();
108
+
109
+ var sendBytes = Encoding.UTF8.GetBytes("GET http://www.google.co.jp/ HTTP/1.1\r\nHost:www.google.co.jp\r\n\r\n" + '\n');
110
+ stream.Write(sendBytes, 0, sendBytes.Length);
111
+
112
+ var ms = new MemoryStream();
113
+ var resBytes = new byte[256];
114
+ var resSize = 0;
115
+ do
116
+ {
117
+ //データの一部を受信する
118
+ resSize = stream.Read(resBytes, 0, resBytes.Length);
119
+ //Readが0を返した時はサーバーが切断したと判断
120
+ if (resSize == 0)
121
+ {
122
+ Console.WriteLine("サーバーが切断しました。");
123
+ break;
124
+ }
125
+ //受信したデータを蓄積する
126
+ ms.Write(resBytes, 0, resSize);
127
+ //まだ読み取れるデータがあるか、データの最後が\nでない時は、
128
+ // 受信を続ける
129
+ } while (stream.DataAvailable || resBytes[resSize - 1] != '\n');
130
+ //受信したデータを文字列に変換
131
+ var resMsg = Encoding.UTF8.GetString(ms.GetBuffer(), 0, (int)ms.Length);
132
+ ms.Close();
133
+ //末尾の\nを削除
134
+ resMsg = resMsg.TrimEnd('\n');
135
+ Console.WriteLine(resMsg);
136
+
137
+ Console.Read();
138
+ }
139
+ }
140
+ }
87
141
  ```

2

追記

2021/09/15 17:40

投稿

abroad128
abroad128

スコア60

title CHANGED
File without changes
body CHANGED
@@ -30,4 +30,58 @@
30
30
  }
31
31
  }
32
32
  }
33
+ ```
34
+
35
+ このようにした場合はReadの部分で止まってしまいます.
36
+ ```C#
37
+ using System;
38
+ using System.Collections.Generic;
39
+ using System.IO;
40
+ using System.Linq;
41
+ using System.Net.Sockets;
42
+ using System.Text;
43
+ using System.Threading.Tasks;
44
+
45
+ namespace ConsoleApp6
46
+ {
47
+ class Program
48
+ {
49
+ static void Main(string[] args)
50
+ {
51
+ var client = new TcpClient();
52
+ client.Connect("www.google.co.jp", 80);
53
+
54
+ var stream = client.GetStream();
55
+ var sw = new StreamWriter(stream);
56
+ sw.Write("GET http://www.google.co.jp/ HTTP/1.1\r\nHost:www.google.co.jp\r\n\r\n");
57
+
58
+ var ms = new MemoryStream();
59
+ var resBytes = new byte[256];
60
+ var resSize = 0;
61
+ do
62
+ {
63
+ //データの一部を受信する
64
+ resSize = stream.Read(resBytes, 0, resBytes.Length);
65
+ //Readが0を返した時はサーバーが切断したと判断
66
+ if (resSize == 0)
67
+ {
68
+ Console.WriteLine("サーバーが切断しました。");
69
+ break;
70
+ }
71
+ //受信したデータを蓄積する
72
+ ms.Write(resBytes, 0, resSize);
73
+ //まだ読み取れるデータがあるか、データの最後が\nでない時は、
74
+ // 受信を続ける
75
+ } while (stream.DataAvailable || resBytes[resSize - 1] != '\n');
76
+ //受信したデータを文字列に変換
77
+ string resMsg = Encoding.UTF8.GetString(ms.GetBuffer(), 0, (int)ms.Length);
78
+ ms.Close();
79
+ //末尾の\nを削除
80
+ resMsg = resMsg.TrimEnd('\n');
81
+ Console.WriteLine(resMsg);
82
+
83
+ Console.Read();
84
+ }
85
+ }
86
+ }
33
87
  ```

1

コード修正

2021/09/15 17:09

投稿

abroad128
abroad128

スコア60

title CHANGED
File without changes
body CHANGED
@@ -15,20 +15,16 @@
15
15
  {
16
16
  static void Main(string[] args)
17
17
  {
18
- using (var client = new TcpClient())
18
+ var client = new TcpClient();
19
- {
20
- client.Connect("www.google.co.jp", 80);
19
+ client.Connect("www.google.co.jp", 80);
21
20
 
22
- using (var stream = client.GetStream())
21
+ var stream = client.GetStream();
23
- {
24
- var sw = new StreamWriter(stream);
22
+ var sw = new StreamWriter(stream);
25
- sw.Write("GET http://www.google.co.jp/ HTTP/1.1\r\nHost:www.google.co.jp\r\n\r\n");
23
+ sw.Write("GET http://www.google.co.jp/ HTTP/1.1\r\nHost:www.google.co.jp\r\n\r\n");
26
24
 
27
- var sr = new StreamReader(stream);
25
+ var sr = new StreamReader(stream);
28
- var res = sr.ReadToEnd();
26
+ var res = sr.ReadToEnd();
29
- Console.WriteLine(res);
27
+ Console.WriteLine(res);
30
- }
31
- }
32
28
 
33
29
  Console.Read();
34
30
  }