php、c#、socket

zhu小伍 发布于 2014/10/17 09:22
阅读 420
收藏 0
PHP

需要用php写个与c#通信的客户段,用socket

C#的客户端是这样的:

     

public static string getStr(string UserID, string UserName)
        {
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPAddress serverIP = IPAddress.Parse("192.168.1.1");   //服务器IP
            try
            {
                s.Connect("192.168.1.1", 8022);    //连接服务器,端口号用8022
                byte[] sendbyte = System.Text.Encoding.Default.GetBytes("@|1|"+UserID+"|#");
                s.Send(sendbyte);
                Thread.Sleep(100);
                byte[] getByte = new byte[10000];

                int count = s.Receive(getByte);


                string getstr = System.Text.Encoding.Default.GetString(getByte);
                return getstr;
            }
            catch (Exception ex)
            {
                //  MessageBox.Show(ex.Message);
                return ex.Message;
            }

            
        }

我写的php客户端这样的:

<?php
//error_reporting(E_ALL);
echo "<h2>tcp/ip connection </h2>\n";
$service_port = 8022;
$address = '192.168.1.1';

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
	echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
} else {
	echo "OK. <br/>";
}

echo "Attempting to connect to '$address' on port '$service_port'...";
$result = socket_connect($socket, $address, $service_port);
if($result === false) {
	echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
} else {
	echo "OK <br/>";
}

$UserID="11810013";
$send = "@|1|".$UserID."|#";


function getBytes($str) {
    $str = iconv('gb2312//IGNORE','UTF-16BE',$str);
    $len = strlen($str);
    $bytes = array();
    for($i=0;$i<$len;$i++) {
        $bytes[] =  ord($str[$i]) ;
    }
    return $bytes;
}

$bytes = getBytes($send);
$sendstr="";
for ($i=0;$i<count($bytes);$i++){
	$sendstr.=$bytes[$i];
}


echo "sending sendbyte ...";
socket_write($socket,$sendstr,strlen($sendstr));
echo  "OK<br/>";
sleep(10);

 $out=socket_read($socket,8024);  
    if($out){  
        var_dump($out);
        echo "<br/>";
    }             
  

echo "closeing socket..";
socket_close($socket);
echo "ok .<br/><br/>";

?>



但无法通信的,求指点



加载中
0
抢小孩糖吃
抢小孩糖吃

socket你写了两个client,起码一个是server ,谁向谁进行通信先搞清楚 C#传给php 还是php传给C#

server要等待socket连接

z
zhu小伍
是这样的,这就是两个客户端 现在就是要将C#写的客户端再用php写一个,不知道哪里写错了来着 C#的客户端是可以正常运行的
0
d
domrr
感觉你客户端发的内容不符合对方的协议,可以抓包看下C#发的数据和你客户端发的数据有啥同
z
zhu小伍
我也觉得System.Text.Encoding.Default.GetBytes这个封装方式和我的不一样,谢谢哈 我再研究下
返回顶部
顶部