• 一个socket发送调试信息的类


    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)."
    ";
    	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!
    ";
        exit;
    }
    
    if ( ($ret = socket_listen($socket, 5)) < 0 ) {
        echo "socket listen:".socket_strerror()."
    ";
        exit;
    }
    
    socket_set_nonblock($socket);
    	echo "Wainting for a connection at $port:
    ";
    $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.
    ";
    	}
    
    	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 "
    ".date("H:i:s").'->'.$data."
    ";
    		$totalBytesRecv += strlen($data);
    		socket_write($read_sock,"OK".chr(0));		
    	}
    }
    socket_close($socket);


     

  • 相关阅读:
    实验0 了解和熟悉操作系统一、目的和要求
    读后感
    有穷自动机自动转化
    文法分析
    词法分析随笔
    git操作笔记
    面试题汇总
    MYSQL数据库设计
    Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
    invalid comparison:java.util.Date and java.lang.String
  • 原文地址:https://www.cnblogs.com/lein317/p/5067573.html
Copyright © 2020-2023  润新知