• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C#和PHP Socket服务器与客户端通信实例代码(图)

c# 搞代码 4年前 (2022-01-09) 23次浏览 已收录 0个评论

这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信。

注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序。在这个例子中,实际上还有很多问题没有解决,如消息边界问题、端口号是否被占用、消息命令的解析问题等。。

下面是两个程序的代码,(两个程序均为控制台程序

先发服务端的(Server)完整代码如下:

引入命名空间:

using System.Net.Sockets;using System.Net;using System.Threading;

完整代码如下:

namespace SocketServer{    class Program    {    <a style="color:transparent">本文来源gao($daima.com搞@代@#码(网5</a>    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;                }            }        }    }}

以上是服务端(server)的完整代码。

客户端(Client)的完整代码如下:

引入命名空间:

using System.Net;using System.Net.Sockets;using System.Threading;

完整代码:

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();        }    }}

编译成功后,先运行 服务端(server),再运行客户端(client)即可达到通信效果。

效果如下图:

该程序已在局域网测试通过。(192.168.X.X)

php socket通信(tcp/udp)

注意 

  1.在socket_bind的时候ip地址不能真回环地址如127.0.0.1

  2.server.php后台跑起来的时候 nohup php server.php > /var/tmp/a.log 2>&1 &

一: udp 方式

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, '202.85.218.133', 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 );}?>

2) client.php

<?php$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);$msg = 'hello';$len = strlen($msg);socket_sendto($sock, $msg, $len, 0, '202.85.218.133', 11109);socket_close($sock);?>

一: TCP 方式

1)server.php

<?php//error_reporting( E_ALL );set_time_limit( 0 );ob_implicit_flush();$socket = socket_create( AF_INET, SOCK_STREAM, SOL_TCP );socket_bind( $socket, '192.168.2.143', 11109 );socket_listen($socket);$acpt=socket_accept($socket);echo "Acpt!\n";while ( $acpt ) {    $words=fgets(STDIN);    socket_write($acpt,$words);    $hear=socket_read($acpt,1024);    echo $hear;    if("bye\r\n"==$hear){        socket_shutdown($acpt);        break;    }    usleep( 1000 );}socket_close($socket)?>

2) client.php

<?php$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);$con=socket_connect($socket,'192.168.2.143',11109);if(!$con){socket_close($socket);exit;}echo "Link\n";while($con){        $hear=socket_read($socket,1024);        echo $hear;        $words=fgets(STDIN);        socket_write($socket,$words);        if($words=="bye\r\n"){break;}}socket_shutdown($socket);socket_close($sock);?>

以上就是C#和PHP Socket服务器与客户端通信实例代码(图)的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C#和PHP Socket服务器与客户端通信实例代码(图)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址