PHP - C#TCP客户端/服务器如何发送字符串?
问题描述:
嘿,我在这里有一个C#Tcp服务器,这里的一个PHP客户端都在工作。PHP - C#TCP客户端/服务器如何发送字符串?
服务器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace ConsoleApplication2
{
class Program
{
public static void Main()
{
try
{
IPAddress ipAd = IPAddress.Parse("127.0.0.1");
TcpListener myList = new TcpListener(ipAd, 8001);
myList.Start();
Console.WriteLine("The server is running at port 8001...");
Console.WriteLine("The local End point is :" +
myList.LocalEndpoint);
Console.WriteLine("Waiting for a connection.....");
while (true)
{
Socket s = myList.AcceptSocket();
Console.WriteLine("Connection accepted from " + s.RemoteEndPoint);
byte[] b = new byte[100];
int k = s.Receive(b);
string szReceived = Encoding.ASCII.GetString(b.Take(k).ToArray());
Console.WriteLine(szReceived);
Console.WriteLine("Recieved..." + szReceived + "---");
switch (szReceived)
{
case "ping":
Console.WriteLine("Ping wird ausgeführt!");
ASCIIEncoding asen = new ASCIIEncoding();
s.Send(asen.GetBytes("PONG !"));
s.Close();
break;
case "logout":
break;
}
}
/* clean up */
myList.Stop();
}
catch (Exception e)
{
Console.WriteLine("Error..... " + e.StackTrace);
}
}
}
}
CLIENT
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<?PHP
error_reporting(E_ALL);
ini_set("display_errors", 1);
$address="127.0.0.1";
$service_port = "8001";
/* Create a TCP/IP socket. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() failed: reason: <br>" .
socket_strerror(socket_last_error()) . "\n";
}
echo "Attempting to connect to '$address' on port '$service_port'...<br>";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
echo "socket_connect() failed.\nReason: ($result) <br>" .
socket_strerror(socket_last_error($socket)) . "\n";
}else {
echo "connected<br>";
}
$in = "ping";
$out = '';
echo "Client Sended: PING !<br>";
socket_write($socket, $in, strlen($in));
echo "SENDED!.\n<br>";
echo "Reading response:\n\n<br>";
while ($out = socket_read($socket, 2048)) {
echo $out;
}
socket_close($socket);
?>
我的问题是,现在我怎么能现在叫我平..然后发送1个或多个字符串后面赶上他们在我的服务器来安慰他们或whateve? ...
我已经在VB中做过这个,所以我知道这是可能的我用Streamreader和写它,但我想这不是在这里工作? 代码示例将是非常有益的
感谢每一个答案:)
答
必须定义自己的协议,可以用它来发送任何东西。例如,发送如下内容:
ping|string1,string2
这意味着命令ping,参数为string1和string2。您可以定义涵盖您需求的任何内容。然后以这种格式发送它们,然后解析它。
这是一个基于你的代码的例子。看看这个(不变代码的某些部分,省略了可读性):
....
Console.WriteLine(szReceived);
Console.WriteLine("Recieved..." + szReceived + "---");
var split = szReceived.Split('|');
if(split.Length==0)return;
var command = split[0];
var parameters = new string[0];
if (split.Length > 0)
parameters = split[1].Split(',');
switch (command)
{
case "ping":
Console.WriteLine("Ping wird ausgeführt!");
ASCIIEncoding asen = new ASCIIEncoding();
foreach (var p in parameters)
Console.WriteLine(p);
s.Send(asen.GetBytes("PONG !"));
s.Close();
break;
case "logout":
break;
}
....
而且PHP代码:
...
$stringsToSend = array("Hello", "World!", "Sth");
$in = "ping|" . implode(",", $stringsToSend);
$out = '';
echo "Client Sended: PING !<br>";
socket_write($socket, $in, strlen($in));
echo "SENDED!.\n<br>";
...
,现在我们应该比较OP版本和您的版本,以获得秘密? ?? –
你是对的!我将编辑 – Ahmad
您实际上应该使用标记长度值格式的混乱,它会让你的生活变得简单。 https://en.wikipedia.org/wiki/Type-length-value –