using UnityEngine;
using System.Collections;
using System; 
using System.Net.Sockets; 
using System.Net;
using System.Text; 
using System.Threading;


public class sockectLogger : MonoBehaviour {
	public static ArrayList outStr = new ArrayList();
	public static string inStr = "";
	public static TcpClient client = null;
	public static NetworkStream stream = null;

	// Use this for initialization
	void Start () {
		SocketConnection("192.168.0.97", 1234);
	}
	
	// Update is called once per frame
	void Update () {
		
	}
	public static void doLog(string str){
		outStr.Add(str);
	}
	private void SocketConnection (string LocalIP, int LocalPort)
	{
		client = new TcpClient (); 
		try {
			IPAddress ip = IPAddress.Parse (LocalIP); 
			IPEndPoint ipe = new IPEndPoint (ip, LocalPort); 
			
			client.Connect (ipe); 
			Thread socketThread = new Thread (socketWork);
			socketThread.Start ();
		} catch (SocketException e) { 
			//ErrLog.RecordErr(e, ModuleName, "AsySocket", ""); 
			log (e.ToString ());
		} catch (Exception e) {
			log ("ReceiveInt e=" + e.ToString ());
		}
		log ("=*> Socket thread start!");
	}
	public static void log (string str)
	{
		Debug.Log (str); 
	}
	public static void socketWork ()
	{
		log ("=*> socketWork started v 5.0");
		while (!client.Connected) {
			log (".");
			Thread.Sleep (300);
		}

		Thread.Sleep (500);//
		log ("=*> socketWork connected");
		stream = client.GetStream ();
		string tmp;
		while (true) {
			try {
				if(outStr.Count>0){
					tmp = outStr[0].ToString();
					outStr.RemoveAt(0);
					log (tmp);
					Send (tmp);
					inStr = ReceiveString();
					log(inStr);
				}
				Thread.Sleep (10);
			} catch (SocketException e) {
				log ("socket thread exception 0:" + e.ToString ());
				break;
			} catch (Exception e) {
				log ("socket thread exception 1:" + e.ToString ());
				break;
			}
		}
		log ("Socket thread end");
	}
	public static void Send (string data)
	{
		try {
			byte[] _data = System.Text.Encoding.Default.GetBytes(data);
			int len = _data.Length;
			log ("Send -->*> " + data.Length + "/" + len);
			stream.Write (_data, 0, data.Length);//,data.getPos(),SocketFlags.ControlDataTruncated);
		} catch (SocketException e) {
			log ("Send e=" + e.ToString ());
		} catch (Exception e) {
			log ("Send e=" + e.ToString ());
		}
	}
	public static string ReceiveString ()
	{
		try {
			byte[] recvBytes = new byte[512]; 
			stream.Read (recvBytes, 0, 512);//从服务器端接受返回信息 
			//log ("receivestring recvBytes="+recvBytes.ToString());
			string data = Encoding.UTF8.GetString (recvBytes); 
			return data; 
		} catch (SocketException e) {
			log ("ReceiveString e=" + e.ToString ());
		} catch (Exception e) {
			log ("ReceiveString e=" + e.ToString ());
		}
		return "";
	}
}


接受信息的服务器端:

<?php
ignore_user_abort(true);
set_time_limit(0);
ini_set('display_errors',true);
ini_set('session.use_cookies',false);
error_reporting(E_ALL);
$addr = "0.0.0.0";
$port = @ (int)$argv[1];
if($port<1024) $port = 1234;
define('EC',chr(1));
define('PORT',$port);

$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);

if (!socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1)) {
    echo 'Unable to set option on socket: '. socket_strerror(socket_last_error()) . PHP_EOL;
}

if($socket < 0) {
	echo "Socket create:".$socket_strerror($socket)."\n";
	exit;
}

if (! ($ret = socket_bind($socket, $addr, $port)) ) {
	$cmd =isset($_SERVER['WINDIR'])? "netstat -an -o | find \"".$port."\"":"netstat -anp | grep \"".$port."\"";
	$output = NULL;
	exec( $cmd, $output , $return_var);
	echo "
	-----------------------------------------------		
	$cmd		
	<pre>";
	var_dump($output, $return_var);
	echo "/<pre>";
    //echo "//AS!\n";
    exit;
}

if ( ($ret = socket_listen($socket, 5)) < 0 ) {
    echo "socket listen:".socket_strerror()."\n";
    exit;
}

socket_set_nonblock($socket);
	echo "Wainting for a connection at $port:\n";
$totalBytesRecv = 0;
$clients = array($socket);
while(true) {
	$read = $clients;
	$writes=NULL;$execs=NULL;
	if(socket_select($read, $writes, $execs, 2) < 1){
		echo ".";
		continue;
	}
	
	if(in_array($socket,$read)) {
		$newsock = socket_accept($socket);
		socket_set_nonblock($newsock);
		socket_getpeername($newsock,$remoteIP,$remotePort);
		$userSN = $remoteIP.'_'.$remotePort;
		$clients[$userSN] = $newsock;

		$key = array_search($socket,$read);
		unset($read[$key]);
		echo $remoteIP.":".$remotePort." conected in.\r\n";
	}

	foreach($read as $read_sock) {
		$data = @socket_read($read_sock, 2048, PHP_BINARY_READ);
		$data = trim($data);
		if(strlen($data) == 2048){
			socket_close($read_sock);
			continue;
		}
		@socket_getpeername($read_sock, $remoteIP, $remotePort);	
		$userSN = $remoteIP.'_'.$remotePort;

		if($data == false) {
			$key = array_search($read_sock, $clients);			
			unset($clients[$key]);
			continue;
		}
		echo "\n".date("H:i:s").'->'.$data."\n";
		$totalBytesRecv += strlen($data);
		socket_write($read_sock,"OK".chr(0));		
	}
}
socket_close($socket);


 

posted on 2014-03-04 19:24  老游条  阅读(185)  评论(0编辑  收藏  举报