2009-07-23 3 views
4

C#で "生の" HTTPクライアントを作成しようとしています。あなたはなぜ?"raw" HTTPクライアントをC#で書く

私の目的は、HTTPクライアントをJ2ME(これはGETと限られたPOSTしかできません)で実装することですが、まずはHTTPプロトコルをよりよく理解する必要があります。

var requestBytes = Encoding.UTF8.GetBytes(@"GET/HTTP/1.1 
User-Agent: CSharp 
Host: www.google.com 

"); 
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
socket.Connect("www.google.com", 80); 
socket.Send(requestBytes); 
var responseBytes = new byte[socket.ReceiveBufferSize]; 
socket.Receive(responseBytes); 
Console.Out.Write(Encoding.UTF8.GetString(responseBytes)); 

ソケットが開きますが、その後のブロックがコールを受信:

私の最初の試みは失敗しています。数秒後、リモートホストは接続を閉じます。

アイデア?

puTTYでRAWモードを使用して接続しようとすると同じことが起こります。

+0

コードは正常に動作しています...新しいコンソールアプリケーションにコピーして貼り付けただけで100%機能しました。他の問題(ネットワークなど)がある可能性があります。 –

+0

ティモシーに感謝します。私の問題は、私がプロキシサーバーの背後にいることだと思います。もう一度自分自身をテストします... – Ries

+0

私にはカットアンドペーストできます。 – divinci

答えて

3

このことをテストしている場合は、IISまたはApacheをローカルにインストールしてからアドレス127.0.0.1を使用するのが最善でしょう。それはあなたにさまざまなものをテストするためのより広い範囲を与える!

誰かが自分のウェブサイトを使ってHTTPプロトコルの実装をテストしているのであれば、私は気に入らないでしょう。

+0

そして、今のところ... Googleが言っているのは...「ユーザーエージェント:CSharp?...私はそう思わない!」 (私はそれが起こっているとは思っていませんが、問題はあなたのコードであることを*知っているように制御された環境でテストします) –

+0

確かに、私は自分のサーバーしかし、ここにアドレスを公表したくはありませんでした。代わりにあなたのアドレスを使用するためのごめんなさいGoogle:| – Ries

-5

TcpListenerクラスを使用する必要があると思います。

その後
// Begin listening for incoming connection requests 
TcpListener myListener = new TcpListener("localhost", 8080); // change to yours 
myListener.Start(); 

Socket mySocket = myListener.AcceptSocket(); 
if (mySocket.Connected) 
{ 
    // do some work 
    mySocket.Send(<data>, <length>, 0); 
} 

はそれに役立つことを願っています。

+1

彼は外向きの接続をしていて、着信を聞いていません。 –

1

「未処理」レベルで再生する場合は、その下のプロトコルを理解する責任があります。 Hypertext Transfer Protocol -- HTTP/1.1 を参照してください。

それ以外の場合は、WebRequestクラスとWebClientクラスに固執する必要があります。

+0

合意 - 試行錯誤的な方法で接続を試みるだけで解決できるよりも、プロトコルのほうがはるかに多くなります。 HTTPクライアントを書くことは重大な仕事です。 –

+0

彼のポイントは、それを別の言語でコード化するために、コードの観点から理解することです。この場合、.NET固有のクラスを使用すると役立たないでしょう。 –

+0

それから彼はRFCとそれが基づいているものを読んで理解することがうまくいくでしょう。彼はプロトコルHTTPが基づいていることを言うことさえできますか? (今助けている学生はいません) –

関連する問題