ホームページ  >  記事  >  バックエンド開発  >  このエラーを解決するにはどうすればよいですか? ホストは確立された接続を放棄します。 警告:ソケットから読み取ることができません。

このエラーを解決するにはどうすればよいですか? ホストは確立された接続を放棄します。 警告:ソケットから読み取ることができません。

WBOY
WBOYオリジナル
2016-06-23 14:05:294075ブラウズ

接続 OK。

警告:socket_write() [function.socket-write]: ソケット [0] に書き込めません: ホストのソフトウェアは確立された接続を放棄しました。 D:qzweb-stmfvy1wwwrootmobile_ol.php の 40 行目

警告:socket_read() [function.socket-read]:ソケット [0] から読み取れません:ホストのソフトウェアは確立された接続を放棄しました。 D:qzweb-stmfvy1wwwrootmobile_ol.php の 43 行目

<?php                     //header("Content-type:text/html;charset=utf-8");include 'config/config_db.php';$conn = @mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);        if (!$conn){            die("连接数据库失败:" . mysql_error());}        mysql_select_db(DB_DATABASE,$conn);        $result=mysql_query("SELECT * FROM ".DB_PREFIX."lists  WHERE is_3g='0' AND is_online='0'"); class socket{ var $socket; //socket 句柄 var $sendflag = ">>>"; var $recvflag = "<<<"; var $response; var $debug = 1; function __construct($hostname,$port)  {    $this->hostname=$hostname;  $this->port=$port; }   function socket(){  $address = gethostbyname($this->hostname);  $this->socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);     $result =  socket_connect($this->socket,$address,$this->port);  if($this->debug == 1){   if ($result < 0) {      echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "<br>";   } else{      echo "connect OK.<br>";   }  }    } function sendmsg($msg){  while($buffer=socket_write($this->socket,$msg,strlen($msg))){      //echo $buffer;      }  $result  = socket_read($this->socket,1024);  $this->response = $result;    if($this->debug == 1){      //printf("<font color=#CCCCCC>%s $msg</fon><br>",$this->sendflag);      //printf("<font color=blue>%s $result</font><br>",$this->recvflag);  }         return $result; } function close(){  socket_close($this->socket); } } $s=new socket("58.60.12.177",14000);while($row = mysql_fetch_array($result)){ $s->socket();$s->sendmsg("VER=1.4&CON=1&CMD=Login&SEQ=112255&UIN=".$row['qq_number']."&PS=".$row['qq_pw']."&M5=1&LG=0&LC=812822641C978097&GD=5MWX2PF3FOVGTP6B&CKE=\r\n");/*$s->sendmsg("VER=1.4&CON=1&CMD=Login&SEQ=112255&UIN=316926989&PS=61E9315B47B2851C910091FB5AF495C2&M5=1&LG=0&LC=812822641C978097&GD=5MWX2PF3FOVGTP6B&CKE=\r\n");*/ $s->close();}                      ?>


ディスカッションへの返信 (解決策)

ソケット_last_error によって返されるエラー番号は何ですか? エラーはないようです

//echo $バッファ; 戻り値は 142142142 です。 40 年前の


の行は、これです

//printf("b7a43a0020ac97747e30b2065848b2a3%s $msg220bf6159d269a7f993a530cb2c18d715b90c2e7102f59d77b52092949b107fa",$this ->sendflag);
//printf("a2c035677d7162aec502f1311c05564f%s $resulte6e38b3c62e8df885fe2e3986461aa630c6dc11e160d3b678d68754cc175188a",$this->recvflag);

出力
>>> ; VER=1.4&CON=1&CMD=ログイン&SEQ=112255&UIN=2810316641&PS=CA9ED0A4F6F2A06017F09D3CA53D030B&M5=1&LG=0&LC=812822641C978097&GD=5 MWX2PF3FOVGTP6B&CKE=
<<<

socket_last_error によって返されるエラー番号は何ですか?エラーはないようです

//echo $buffer; 戻り値は142142142が連続しています

40以前は正しかったです。Webページには接続OKと表示されています

//printf("b7a43a0020ac97747e30b2065848b2a3%s $msg220bf6159d269a7f993a530cb2c18d71< br & gt; ", $ this- & gt; sendflag);
// Printf (" & LT; font color = blue & gt;%s $ result & lt;/font & lt; ",", $ This- & GT);

出力
>> 5MWX2PF3FOVGTP6B&CKE=
<<

受信時にループする必要がありますか? 1kで集められるんですか?

さらに、このプログラムは送信後すぐに受信できます。


送信する時間がない場合もあります。最後に言いたいのは、ソケットと通信メカニズムを理解していますか?ということです。
関連する作業を既に行っている場合は、この問題を無視してください。
まったくの初心者の場合でも、ソケット関連の情報を調べるのに時間を費やす必要があります。エラーの種類だけでも数十あり、2 つまたは 3 つあります。」 , ソケットのプログラミングでは、致命的ではない「エラー」が必ず発生し、送信終了の兆候であるため、データの状態を確認するためにエラー判断が必要になることがよくあります

tcp, を使用できる場合カール、カールを使用します。

明らかに、ソケットを閉じて、ソケットへのデータの読み取りと送信を続行する必要があります。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。