您好,欢迎访问一九零五行业门户网

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

这个例子只是简单实现了如何使用 socket 类实现面向连接的通信。
注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序。在这个例子中,实际上还有很多问题没有解决,如消息边界问题、端口号是否被占用、消息命令的解析问题等。。
下面是两个程序的代码,(两个程序均为控制台程序)
先发服务端的(server)完整代码如下:
引入命名空间:
using system.net.sockets; using system.net; using system.threading;
完整代码如下:
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; } } } } }
以上是服务端(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服务器与客户端通信实例代码(图)的详细内容。
其它类似信息

推荐信息