一个socket发送调试信息的类
2014-03-04 19:24
309 查看
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);
相关文章推荐
- 一个socket发送调试信息的类
- java--socket实现一个client像还有一个client发送信息
- 关于socket应用:一个不断监听一个进程的服务器以及发送信息的客户端 TCP的三次握手和四次挥手
- java--socket实现一个客户端像另一个客户端发送信息
- 用WH_MOUSE做hook时,用调试语句OutputDebugString打印调试信息的时候出现的一个问题
- 异常信息:CLR无法从COM 上下文0x645e18 转换为COM上下文0x645f88,这种状态已持续60秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作.这种情况通常会影响到
- ZeroMQ接口函数之 :zmq_send_const – 从一个socket上发送一个固定内存数据
- 分布式编程->Remoting的一个代码示例(借助Remoting实现发送信息功能)
- 异常信息:CLR无法从COM 上下文0x645e18 转换为COM上下文0x645f88,这种状态已持续60秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作.这种情况通常会影响到性能,甚至可能导致应用程序不响应或者使用的内存随时间不断累积
- 用ASP.Net写一个发送ICQ信息的程序
- [转]Remoting的一个代码示例(借助Remoting实现发送信息功能)
- 使用netconsole发送linux驱动程序调试信息和kernel panic消息
- 一个简单的socket服务端和客户端程序:客户端发送数据给服务端,服务端接收到数据后再给客户端发送数据
- 我想用 VS2005 建立一个学生信息查询系统,但是调试的时候显示“当前上下文中不存在···”
- 一个简单好用的zabbix告警信息发送工具
- socket 怎么发送一个变量值
- 0905使用msgsnd函数向消息队列中发送一个字符串数据信息“Hello!This is a te
- 当debug信息单独存放为一个文件时使用gdb调试CoreDump
- 分享一个用OnGUI在手机上打印调试信息的工具类
- 只编译一个模块的debug信息,调试此模块