一个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)."\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发送调试信息的类的更多相关文章
- ZeroMQ接口函数之 :zmq_msg_send – 从一个socket发送一个消息帧
		
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_msg_send zmq_msg_send(3) ØMQ Manual - ØMQ/3.2.5 Name zmq_ ...
 - C# Debug和Trace:输出调试信息
		
在 C# 语言中允许在程序运行时输出程序的调试信息,类似于使用 Console.WriteLine 的方式向控制台输出信息.所谓调试信息是程序员在程序运行时需要获取的程序运行的过程,以便程序员更好地解 ...
 - Windows程序调试系列: 使用VC++生成调试信息   转
		
Windows程序调试系列: 使用VC++生成调试信息 ZhangTao,zhangtao.it@gmail.com, 译自 “Generating debug information with Vi ...
 - ZeroMQ接口函数之 :zmq_sendmsg – 从一个socket上发送一个消息帧
		
ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq-sendmsg zmq_sendmsg(3) ØMQ Manual - ØMQ/4.1.0 Name ...
 - ZeroMQ接口函数之 :zmq_send_const – 从一个socket上发送一个固定内存数据
		
ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ——————————————————————————————————— ...
 - QObject提供了QMetaObject元类信息(相当于RTTI和反射),信号与连接,父子关系,调试信息,属性,事件,继承关系,窗口类型,线程属性,时间器,对象名称,国际化
		
元类信息(相当于RTTI和反射),信号与连接,父子关系,调试信息,属性,事件,继承关系,窗口类型,线程属性,时间器,对象名称,国际化其中元类又提供了:classInfo,className,构造函数, ...
 - js操作dom---创建一个域来输出调试信息
		
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
 - 一个用php实现的获取URL信息的类
		
获取URL信息的类 使用这个类,你能获得URL的如下信息: - Host - Path - Statuscode (eg. 404,200, ...) - HTTP Version - Ser ...
 - 用ASP.Net写一个发送ICQ信息的程序
		
用ASP.Net写一个发送ICQ信息的程序 这里我给大家提供一个很实用的例子,就是在线发送ICQ信息.想一想我们在网页上直接给朋友发送ICQ信息,那是多么美妙的事情啊.呵呵,在吹牛啊,其实ICQ本来就 ...
 
随机推荐
- C++中关于new及内存地址的思考
			
OJ题刷多了,每次都是直接分配内存,那么,你还记得怎么动态分配内存吗? ———————————————————————————————————— 我们知道,使用malloc/calloc等分配内存的函 ...
 - poj2079Triangle(N点中三点组成三角形面积最大)
			
链接 根据旋转卡壳的思想,找到当前边的最远点. 确定i,j找到最远的k使 cross(i,j,k)最大,那么i,j+1时只需从k+1开始找即可 . #include <iostream> ...
 - Ruby方法
			
Ruby 方法 Ruby 方法与其他编程语言中的函数类似.Ruby 方法用于捆绑一个或多个重复的语句到一个单元中. 方法名应以小写字母开头.如果您以大写字母作为方法名的开头,Ruby 可能会把它当作常 ...
 - final简介
			
final简介 final用来修饰方法和属性表示特殊的意义.修饰方法时表示方法不能被重写:修饰属性时表示属性不能被改变,这里属性又分为对象和基本类型,修饰基本类型表示基本类型赋值以后不能再被赋值,修饰 ...
 - Bootstrap文本对齐风格
			
在排版中离不开文本的对齐方式.在CSS中常常使用text-align来实现文本的对齐风格的设置.其中主要有四种风格: ☑ 左对齐,取值left ☑ 居中对齐,取值center ☑ 右对齐,取值r ...
 - LINUX多线程(一)(创建和退出)
			
1. Linux多线程概述 1.1. 概述 进程是系统中程序执行和资源分配的基本单位.每个进程有自己的数据段.代码段和堆栈段.这就造成进程在进行切换等操作时都需要有比较负责的上下文切换等动作.为了进一 ...
 - Jq_文档操作方法、属性操作方法、CSS操作函数
			
JQuery文档操作方法 这些方法对于 XML 文档和 HTML 文档均是适用的,除了:html(). 方法 描述 addClass() ...
 - 20160805_CentOS6_键盘快捷键
			
1. 系统 -->首选项 --> 键盘快捷键 2. 3.
 - java 多线程7(线程的停止)
			
notify(): 是很温和的唤醒线程的方法,它不可以指定清除哪一个异常 interrupt(): 粗暴的方式,强制清除线程的等待状态,被清除的线程会接收到一个InterruptedException ...
 - linux笔记:linux常用命令-用户管理命令
			
用户管理命令:useradd(添加用户) 用户管理命令:passwd(设置和修改用户密码) 用户管理命令:who(查看所有登录用户的信息)