C#写的客户端连接 php的服务器端的小例子

php的server 端

  1. <?php
  2. // server.php
  3. set_time_limit( 0 );
  4. ob_implicit_flush();
  5. $socket = socket_create( AF_INET, SOCK_STREAM, SOL_TCP );
  6. socket_bind( $socket, '127.0.0.1', 8880 );
  7. socket_listen($socket);
  8. $acpt=socket_accept($socket);
  9. echo "> Acpt!\n";
  10. while ( $acpt ) {
  11. echo "> ";
  12. $words= trim(fgets(STDIN));
  13. if(strlen($words) === 0) $words = "\n";
  14. socket_write($acpt,$words);
  15. $hear=socket_read($acpt,1024);
  16. echo "client>" . $hear . "\n" ;
  17. if("bye"==$hear){
  18. socket_shutdown($acpt);
  19. break;
  20. }
  21. usleep( 1000 );
  22. }
  23. socket_close($socket);
  24. echo "> bye bye\n";
  25. ?>

以交互式方法运行:

  1. php -a server.php

C#写的客户端

  1. public class Client
  2. {
  3. private static byte[] result = new byte[1024];
  4. public string serverIp = "127.0.0.1";
  5. public int severPort = 8880;
  6. public Client(string serverIp, int serverPort)
  7. {
  8. this.serverIp = serverIp;
  9. this.severPort = serverPort;
  10. }
  11. public void start()
  12. {
  13. //设定服务器IP地址
  14. IPAddress ip = IPAddress.Parse(serverIp);
  15. Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  16. try {
  17. clientSocket.Connect(new IPEndPoint(ip, severPort));
  18. Console.WriteLine("连接服务器成功");
  19. } catch {
  20. Console.WriteLine("连接服务器失败");
  21. return;
  22. }
  23. int receiveLength;
  24. while (clientSocket.Connected) {
  25. receiveLength = clientSocket.Receive(result);
  26. string sv_word = Encoding.ASCII.GetString(result, 0, receiveLength);
  27. Console.WriteLine("Sever> {0}", sv_word);
  28. if (sv_word.Trim() == "bye") break;
  29. Console.Write("> ");
  30. string words = Console.ReadLine();
  31. if (string.IsNullOrEmpty(words)) words = "\n";
  32. clientSocket.Send(Encoding.ASCII.GetBytes(words));
  33. if (words.Trim() == "bye") break;
  34. }
  35. if(clientSocket.Connected) clientSocket.Close();
  36. Console.WriteLine("> bye bye");
  37. }
  38. }

加入引入

  1. using System.Net;
  2. using System.Net.Sockets;
  3. using System.Threading;

在某处调用

  1. new Client("127.0.0.1", 8880).start();

C#写的客户端连接 php的服务器端的小例子的更多相关文章

  1. 配置ORACLE 客户端连接到数据库

    --================================= -- 配置ORACLE 客户端连接到数据库 --================================= Oracle ...

  2. (3.10)mysql基础深入——mysqld 服务器与客户端连接过程 源码分析【待写】

    (3.10)mysql基础深入——mysqld 服务器与客户端连接过程 源码分析[待写]

  3. 一个I/O线程可以并发处理N个客户端连接和读写操作 I/O复用模型 基于Buf操作NIO可以读取任意位置的数据 Channel中读取数据到Buffer中或将数据 Buffer 中写入到 Channel 事件驱动消息通知观察者模式

    Tomcat那些事儿 https://mp.weixin.qq.com/s?__biz=MzI3MTEwODc5Ng==&mid=2650860016&idx=2&sn=549 ...

  4. 设置客户端连接PostgreSQL不需要密码

    平常工作中,有时需要远端连接 PostgreSQL 数据库做些维护,例如远端备份等:如果备份脚本写在远端机器,备份的时候会弹出密码输入提示,那么脚本就不能后台执行,这里总结了几种不弹出密码输入提示的方 ...

  5. Zookeeper学习记录及Java客户端连接示例

    1. Zookeeper 1.1 简介 ZooKeeper is a centralized service for maintaining configuration information, na ...

  6. zookeeper设置客户端连接超时被expired

    在网络环境非常差的情况下,使用zookeeper集群往往会遇到连接expired了: 客户端提示连接从ZOO_CONNECTION_STATE变为ZOO_EXPIRED_SEESION_STATE,然 ...

  7. redis客户端连接异常

    本文参考:http://mdba.cn/2015/04/02/redistwemproxy-%e5%ae%a2%e6%88%b7%e7%ab%af%e8%bf%9e%e6%8e%a5%e5%bc%82 ...

  8. atitit.客户端连接oracle数据库的方式总结

    客户端连接oracle数据库的方式总结 目录 Java程序连接一般使用jar驱动连接..... 桌面GUI一般采取c语言驱动oci.dll 直接连接... 间接连接(需要配置tns及其envi var ...

  9. java socket通讯(二)处理多个客户端连接

    通过java socket通讯(一) 入门示例,就可以实现服务端和客户端的socket通讯,但是上一个例子只能实现一个服务端和一个客户端之间的通讯,如果有多个客户端连接服务端,则需要通过多线程技术来实 ...

随机推荐

  1. JavaScript下全选反选的Demo程序里实现checkmeonly函数 DOM

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 11-UIKit(Storyboard、View的基本概念、绘制图形、UIBezierPath)

    目录: 1. Storyboard 2. Views 3. View的基本概念介绍 4. 绘制图形 5. UIBezierPath 回到顶部 1. Storyboard 1.1 静态表视图 1)Sec ...

  3. Qt 学习之路 2(75):线程总结

    前面我们已经详细介绍过有关线程的一些值得注意的事项.现在我们开始对线程做一些总结. 有关线程,你可以做的是: 在QThread子类添加信号.这是绝对安全的,并且也是正确的(前面我们已经详细介绍过,发送 ...

  4. C# 仿金山毒霸启动和关闭淡入淡出效果

    原文 C# 仿金山毒霸启动和关闭淡入淡出效果 01 #region 窗体关闭效果 02   03 #region 私有方法 04 [DllImportAttribute("user32.dl ...

  5. Android ListView 常见问题与使用总结

    一.机制 ListView机制 - 先运行getCount.然后运行getView. 假设getCount返回0,不运行getView Gallery convertView不会复用.每次都返回NUL ...

  6. spring利用扫描方式对bean的处理(对任何版本如何获取xml配置信息的处理)

    利用扫描的方式将组件注入容器,就也可以不用操作bean来实例化对象了. 下面我做一个例子 我用的spring3.2.2版本的 首先写一个spring.xml. <?xml version=&qu ...

  7. jQuery 3.0 的 Data

    jQuery 3.0 的 Data Snandy If you cannot hear the sound of the genuine in you, you will all of your li ...

  8. NET Core R2跑Hello World

    在CentOS 7上安装.NET Core R2跑Hello World 前言 在上个月.NET Core出了最新版本预览版,只是在Window系统上试验了一下.原本想等发布正式版的时候在linux系 ...

  9. Java学习——何为JNDI

    曾记得在做机房收费系统的时候就接触到了API,由于它的功能非常强大,可是自己对它却不怎么了解.所以当时是又爱又怕.现在,一路走来才明确,事实上它就是一组接口.仅仅要我们去了解它就会发现.它事实上也没想 ...

  10. node-inspector使用

    nodejs.gulp调试工具node-inspector使用 俗话说欲善其功,必先利其器. 作为目前新型的Web Server开发栈倍受开发者关注的Nodejs来说,调试技术是学习开发的基石,所以对 ...