工作中用到了C/S模型,所做的也无非是给服务器发数据,但开发阶段会遇到程序自身的回环测试,需要用到简单的服务端以便验证数据发送的正确性。

写软件用C++,跑测试用python,这段时间也刚好看go语言,所以都要有demo。以下三组程序实现的功能相同,这里一起做下总结。

一、C++实现

Boost.Asio是一个跨平台的C++库,它用现代C++方法为网络和底层I/O程序提供了一致的异步I/O模型。 为了跨平台,我用boost库实现,具体如下。

服务端代码:

 1 /* 2      File      : svr.cpp 3      Author    : Mike 4      E-Mail    : Mike_Zhang@live.com 5 */ 6  7 #include <iostream> 8 #include <boost/asio.hpp> 9 10 using boost::asio::ip::tcp;11 enum {max_length = 1024};12 13 typedef boost::shared_ptr<tcp::socket> socket_ptr;14 15 int main()16 {17     boost::asio::io_service io_service;18     tcp::acceptor a(io_service, tcp::endpoint(tcp::v4(), atoi("12345")));19     for (;;)20     {21         socket_ptr sock(new tcp::socket(io_service));22         a.accept(*sock);23         char data[max_length];24         boost::system::error_code error;25         size_t length = sock->read_some(boost::asio::buffer(data), error);26         data[length] = 0;27         std::cout<<data<<std::endl;28         sock->close();29     }30     return 0;31 }

客户端代码:

 1 /* 2      File      : cli.cpp 3      Author    : Mike 4      E-Mail    : Mike_Zhang@live.com 5 */ 6 #include <iostream> 7 #include <boost/asio.hpp> 8  9 using boost::asio::ip::tcp;10 enum { max_length = 1024 };11 12 int main(int argc, char* argv[])13 {14     boost::asio::io_service io_service;15     tcp::resolver resolver(io_service);16     tcp::resolver::query query(tcp::v4(), "127.0.0.1","12345");17     tcp::resolver::iterator iterator = resolver.resolve(query);18 19     tcp::socket s(io_service);20     s.connect(*iterator);21 22     std::cout << "Please input: ";23     char request[max_length];24     std::cin.getline(request, max_length);25     size_t request_length = strlen(request);26     boost::asio::write(s, boost::asio::buffer(request, request_length));27     return 0;28 }

编译:g++ cli.cpp -o cli -lboost_system -lboost_thread-mt

二、python实现

服务端代码:

 1 ''' 2      File      : svr.py 3      Author    : Mike 4      E-Mail    : Mike_Zhang@live.com 5 ''' 6 import socket,os 7 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)   8 sock.bind(('127.0.0.1', 12345))   9 sock.listen(5)  10 while True:  11     connection,address = sock.accept()  12     buf = connection.recv(1024)  13     print buf            14     connection.close()  

客户端代码:

 1 ''' 2      File      : cli.py 3      Author    : Mike 4      E-Mail    : Mike_Zhang@live.com 5 ''' 6 import socket   7 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)   8 sock.connect(('127.0.0.1', 12345))   9 #sock.send('Test\n')  10 sock.send(raw_input("Please input : "))  11 sock.close()  

三、go语言实现

服务端代码:

 1 /* 2      File      : svr.go 3      Author    : Mike 4      E-Mail    : Mike_Zhang@live.com 5 */ 6 package main 7  8 import( 9     "net"10     "fmt"11     "bufio"12 )13 14 func main() {15     client,err := net.Listen("tcp","127.0.0.1:12345")16     if err != nil {17         fmt.Printf("Error : %s\n",err.String())18     }19     for {20         if c, err := client.Accept(); err == nil { 21             defer c.Close()22             line, _ := bufio.NewReader(c).ReadString('\n')23             fmt.Println(line) 24         }25     }26 }

客户端代码:

 1 /* 2      File      : cli.go 3      Author    : Mike 4      E-Mail    : Mike_Zhang@live.com 5 */ 6 package main 7  8 import( 9     "net"10     "fmt"11 )12 13 func main() {14     conn, err := net.Dial("tcp", "127.0.0.1:12345")15     if err != nil {16         fmt.Printf("Error : %s\n",err.String())17     }18     conn.Write([]byte("Just a test"))     19 }

运行效果(go语言为例):

好,就这些了,希望对你有帮助。

简单客户端服务器模型(C++、python和go语言示例)相关推荐

  1. python和c语言哪个更难学深_c语言和python先学哪个比较简单

    c语言和python相比来说,python要简单一些,先学python容易上手.不过,c语言比python难,如果先学c语言能够打好基础,日后再学习别的语言要简单得多.不管先学哪个都可以,看大家自己怎 ...

  2. python和c语言哪个简单

    python相较C语言入门要简单的多. C语言是一门面向过程.抽象化的通用程序设计语言,广泛应用于底层开发.C语言能以简易的方式编译.处理低级存储器. C语言是仅产生少量的机器语言以及不需要任何运行环 ...

  3. python和c 的区别-Python和C语言的区别是什么?Python和C语言的简单比较

    Python和C语言都是一种可用于实现多线程的高级编程语言,那么它们之间有什么区别?本篇文章就来简单比较一下Python和C语言,让大家了解Python和C语言之间的区别,希望对大家有所帮助. 什么是 ...

  4. 芯片验证学perl还是python_科学网—用python或perl语言简单验证RSA算法 - 康建的博文...

    python或perl语言都提供了很方便的对大整数计算的功能,这在C或Fortran中不易实现,需调用相关的库或另编程序. 多年前听公开课,一位老师给学生讲电子商务安全,涉及到公钥密码,讲得生动,但没 ...

  5. python是c语言_python与c语言

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python语言调用c语言进行扩展,或者增加程序的运行速度都是特别方便的. 同时 ...

  6. python调用r语言加载包错误_Python调用R语言

    网络上经常看到有人问数据分析是学习Python好还是R语言好,还有一些争论Python好还是R好的文章.每次看到这样的文章我都会想到李舰和肖凯的<数据科学中的R语言>,书中一直强调,工具不 ...

  7. udp客户端与服务器端模型_客户端-服务器模型

    udp客户端与服务器端模型 As mentioned in the previous article, one of the requirements of using PHP on a page i ...

  8. (附源码)python《C语言程序设计》课程案例库研究 毕业设计 030946

    Python<C语言程序设计>课程案例库研究系统 摘 要 <C语言程序设计>课程案例库研究系统系统主要功能模块包括学生用户管理.管题库信息管理.题库练习等,采取面对对象的开发模 ...

  9. (附源码)Python《C语言程序设计》课程案例库研究 毕业设计030946

    Python<C语言程序设计>课程案例库研究系统 摘 要 <C语言程序设计>课程案例库研究系统系统主要功能模块包括学生用户管理.管题库信息管理.题库练习等,采取面对对象的开发模 ...

最新文章

  1. 对html5的了解,HTML5——对HTML5的认识
  2. 深蓝学院《从零开始手写VIO》作业一
  3. 耳前瘘管是否必须切除
  4. 比tween更有效的tween包.
  5. 小程序 字号设置 slider滚动改变大小_SteerMouse for mac(鼠标设置工具) v5.4.3
  6. Java 解析URL
  7. 用js实现鼠标点击爱心特效
  8. 用户体验设计答疑对话(半吊子和纯外行
  9. python编程入门 适合于零基础朋友-Python不能帮你找到女朋友,却能让你成为有钱的单身狗。...
  10. Redis介绍及常用命令【转载】
  11. study - 收藏集 - 掘金
  12. Open Source Drives IOT From Device to Edge
  13. 【评价模型】数据包络分析法(DEA)
  14. 计算机课的十个小游戏制作教程,腾讯内容开放平台
  15. win7局域网共享教程
  16. ios录音文件路径_苹果6s的录音储存在哪个文件夹
  17. 小米MIX进入和退出Recovery模式、Fastboot模式各种方法
  18. 从斗鱼Android开发二面被刷,到VR微创公司收留,我的NDK开发梦究竟缺了什么
  19. C语言将一个数插入到已排好序的数组中
  20. AR联机游戏制作过程记录(11.11)

热门文章

  1. jenkins执行xctool命令出现command not found问题解决方法
  2. 解读《电力发展“十三五”规划》
  3. python 其他函数调用 __init__ 初始化的值
  4. 返回浏览器或div 顶部
  5. python-深浅copy-18
  6. 小米AIoT开发者大会28日召开,雷军的AIoT和小米的这一年
  7. Hibernate QBC 分页
  8. 【转载】老鸟程序员总结的这些小技巧
  9. python添加模块搜索路径
  10. html+css常用小笔记(持续更新)