一个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本来就 ...
随机推荐
- [mysql]支持emoji(字符集问题)!
问题的根源 主要问题就是在字符集,一般解决这种问题都是靠试验.我实验了一通,得出的结论和大家分享一下(如有错误,还望指正): 数据库的字符集 数据库连接的字符集 配置方法 设置数据库的字符集为utf8 ...
- HTML5 学习笔记--------》HTML5概要与新增标签!
一.HTML5概要 1.1.为什么需要HTML5 HTML4陈旧不能满足日益发展的互联网需要,特别是移动互联网.为了增强浏览器功能Flash被广泛使用,但安全与稳定堪忧,不适合在移动端使用(耗电. ...
- (六)动手写第一个shell
1.编辑器.编译器.运行方法(脚本的3种执行方法)(1)shell程序是文本格式的,只要是文本编辑器都可以.但是因为我们的shell是要在linux系统下运行的,所以换行符必须是'\n',而windo ...
- TortoiseGIT
TortoiseGIT 是Git版本控制系统的一个免费开源客户端,它是git版本控制的 Windows 扩展.可以使你避免使用枯燥而且不方便的命令行.它完全嵌入 Windows Explorer,使用 ...
- hdu 1588(Fibonacci矩阵求和)
题目的大意就是求等差数列对应的Fibonacci数值的和,容易知道Fibonacci对应的矩阵为[1,1,1,0],因为题目中f[0]=0,f[1]=1,所以推出最后结果f[n]=(A^n-1).a, ...
- PLSQL Developer连接远程Oracle方法(非安装客户端)
Oracle比较麻烦,通常需要安装oracle的客户端才能实现.通过instantclient可以比较简单的连接远程的Oracle. 1.新建目录D:\Oracle_Cleint用于存放相关文件,新建 ...
- hdu 5755(高斯消元——模线性方程组模板)
PS. 看了大神的题解,发现确实可以用m个未知数的高斯消元做.因为确定了第一行的情况,之后所有行的情况都可以根据第一行推. 这样复杂度直接变成O(m*m*m) 知道了是高斯消元后,其实只要稍加处理,就 ...
- 转:union 联合体(共用体)
转自:http://blog.csdn.net/xiao3404/article/details/22276485 2.共用体 2.1共用体的概念 共用体是一种构造类型的数据结构.在一个“共用体”内可 ...
- J2EE 第二阶段项目之分析业务
这次的项目为: 两金申报系统.主要是关系的练习,CRUD,统计. 这个项目没有pdf图,只有一本使用手册.(在我们出去工作后,做项目的时候,也可能只有项目需求的资料). 分析:每一张表都有分页,查看 ...
- Hadoop的HA集群启动和停止流程
假设我们有3台虚拟机,主机名分别是hadoop01.hadoop02和hadoop03. 这3台虚拟机的Hadoop的HA集群部署计划如下: 3台虚拟机的Hadoop的HA集群部署计划 hadoop0 ...