Beispielcode für die C#- und PHP-Socket-Server- und Client-Kommunikation (Bild)

黄舟
Freigeben: 2017-03-10 14:02:30
Original
2362 Leute haben es durchsucht

Dieses Beispiel implementiert einfach, wie die Socket-Klasse verwendet wird, um verbindungsorientierte Kommunikation zu implementieren.

Hinweis: Der Zweck dieses Beispiels besteht nur darin, die allgemeine Idee des Schreibens eines Programms mithilfe von Sockets zu veranschaulichen, nicht die Verwendung des Programms im tatsächlichen Projekt. In diesem Beispiel gibt es tatsächlich viele Probleme, die noch ungelöst sind, z. B. Probleme mit der Nachrichtengrenze, die Frage, ob die Portnummer belegt ist, und Probleme beim Parsen von Nachrichtenbefehlen. .

Das Folgende ist der Code der beiden Programme (Beide Programme sind Konsolenprogramme)

Der vollständige Code des ersten Servers (Server) lautet wie folgt:

Einführung in den Namespace:

using System.Net.Sockets;
using System.Net;
using System.Threading;
Nach dem Login kopieren

Der vollständige Code lautet wie folgt:

namespace SocketServer
{
    class Program
    {
        private static byte[] result = new byte[1024];
        private static int myProt = 8885;   //端口
        static Socket serverSocket;
        static void Main(string[] args)
        {
            //服务器IP地址
            IPAddress ip = IPAddress.Parse("127.0.0.1");
            serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            serverSocket.Bind(new IPEndPoint(ip, myProt));  //绑定IP地址:端口
            serverSocket.Listen(10);    //设定最多10个排队连接请求
            Console.WriteLine("启动监听{0}成功", serverSocket.LocalEndPoint.ToString());
            //通过Clientsoket发送数据
            Thread myThread = new Thread(ListenClientConnect);
            myThread.Start();
            Console.ReadLine();
        }
        /// <summary>
        /// 监听客户端连接
        /// </summary>
        private static void ListenClientConnect()
        {
            while (true)
            {
                Socket clientSocket = serverSocket.Accept();
                clientSocket.Send(Encoding.ASCII.GetBytes("Server Say Hello"));
                Thread receiveThread = new Thread(ReceiveMessage);
                receiveThread.Start(clientSocket);
            }
        }
        /// <summary>
        /// 接收消息
        /// </summary>
        /// <param name="clientSocket"></param>
        private static void ReceiveMessage(object clientSocket)
        {
            Socket myClientSocket = (Socket)clientSocket;
            while (true)
            {
                try
                {
              //通过clientSocket接收数据
             int receiveNumber = myClientSocket.Receive(result);
      Console.WriteLine("接收客户端{0}消息{1}", myClientSocket.RemoteEndPoint.ToString(), Encoding.ASCII.GetString(result, 0, receiveNumber));
                }
                catch(Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    myClientSocket.Shutdown(SocketShutdown.Both);
                    myClientSocket.Close();
                    break;
                }
            }
        }
    }
}
Nach dem Login kopieren

Das Obige ist der vollständige Code des Servers.

Der vollständige Code des Clients lautet wie folgt:

Einführung des Namespace:

using System.Net;
using System.Net.Sockets;
using System.Threading;
Nach dem Login kopieren

Der vollständige Code:

namespace SocketClient
{
    class Program
    {
        private static byte[] result = new byte[1024];
        static void Main(string[] args)
        {
            //设定服务器IP地址
            IPAddress ip = IPAddress.Parse("127.0.0.1");
            Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                clientSocket.Connect(new IPEndPoint(ip, 8885)); //配置服务器IP与端口
                Console.WriteLine("连接服务器成功");
            }
            catch
            {
                Console.WriteLine("连接服务器失败,请按回车键退出!");
                return;
            }
            //通过clientSocket接收数据
            int receiveLength = clientSocket.Receive(result);
            Console.WriteLine("接收服务器消息:{0}",Encoding.ASCII.GetString(result,0,receiveLength));
            //通过 clientSocket 发送数据
            for (int i = 0; i < 10; i++)
            {
                try
                {
                    Thread.Sleep(1000);    //等待1秒钟
                    string sendMessage = "client send Message Hellp" + DateTime.Now;
                    clientSocket.Send(Encoding.ASCII.GetBytes(sendMessage));
                    Console.WriteLine("向服务器发送消息:{0}" + sendMessage);
                }
                catch
                {
                    clientSocket.Shutdown(SocketShutdown.Both);
                    clientSocket.Close();
                    break;
                }
            }
            Console.WriteLine("发送完毕,按回车键退出");
            Console.ReadLine();
        }
    }
}
Nach dem Login kopieren

Nach erfolgreicher Kompilierung führen Sie zuerst den Server und dann den Client aus, um den Kommunikationseffekt zu erzielen.

Der Effekt ist wie folgt:


Das Programm wurde auf dem getestet LAN. (192.168. Die wahre Loopback-Adresse ist 127.0.0.1

2. Wenn server.php im Hintergrund läuft, nohup php server.php > /var/tmp/a.log 2>&1 &

1: udp-Methode

1) server.php

2) client.php

1: TCP-Methode

1)server.php

<?php

//error_reporting( E_ALL );
set_time_limit( 0 );
ob_implicit_flush();
$socket = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
if ( $socket === false ) {
    echo "socket_create() failed:reason:" . socket_strerror( socket_last_error() ) . "\n";
}
$ok = socket_bind( $socket, &#39;202.85.218.133&#39;, 11109 );
if ( $ok === false ) {
    echo "socket_bind() failed:reason:" . socket_strerror( socket_last_error( $socket ) );
}
while ( true ) {
    $from = "";
    $port = 0;
    socket_recvfrom( $socket, $buf,1024, 0, $from, $port );
    echo $buf;
    usleep( 1000 );
}
?>
Nach dem Login kopieren
2) client.php

<?php
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
$msg = &#39;hello&#39;;
$len = strlen($msg);
socket_sendto($sock, $msg, $len, 0, &#39;202.85.218.133&#39;, 11109);
socket_close($sock);
?>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonBeispielcode für die C#- und PHP-Socket-Server- und Client-Kommunikation (Bild). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!