简单客户端服务器模型(C++、python和go语言示例)
工作中用到了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语言示例)相关推荐
- python和c语言哪个更难学深_c语言和python先学哪个比较简单
c语言和python相比来说,python要简单一些,先学python容易上手.不过,c语言比python难,如果先学c语言能够打好基础,日后再学习别的语言要简单得多.不管先学哪个都可以,看大家自己怎 ...
- python和c语言哪个简单
python相较C语言入门要简单的多. C语言是一门面向过程.抽象化的通用程序设计语言,广泛应用于底层开发.C语言能以简易的方式编译.处理低级存储器. C语言是仅产生少量的机器语言以及不需要任何运行环 ...
- python和c 的区别-Python和C语言的区别是什么?Python和C语言的简单比较
Python和C语言都是一种可用于实现多线程的高级编程语言,那么它们之间有什么区别?本篇文章就来简单比较一下Python和C语言,让大家了解Python和C语言之间的区别,希望对大家有所帮助. 什么是 ...
- 芯片验证学perl还是python_科学网—用python或perl语言简单验证RSA算法 - 康建的博文...
python或perl语言都提供了很方便的对大整数计算的功能,这在C或Fortran中不易实现,需调用相关的库或另编程序. 多年前听公开课,一位老师给学生讲电子商务安全,涉及到公钥密码,讲得生动,但没 ...
- python是c语言_python与c语言
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python语言调用c语言进行扩展,或者增加程序的运行速度都是特别方便的. 同时 ...
- python调用r语言加载包错误_Python调用R语言
网络上经常看到有人问数据分析是学习Python好还是R语言好,还有一些争论Python好还是R好的文章.每次看到这样的文章我都会想到李舰和肖凯的<数据科学中的R语言>,书中一直强调,工具不 ...
- udp客户端与服务器端模型_客户端-服务器模型
udp客户端与服务器端模型 As mentioned in the previous article, one of the requirements of using PHP on a page i ...
- (附源码)python《C语言程序设计》课程案例库研究 毕业设计 030946
Python<C语言程序设计>课程案例库研究系统 摘 要 <C语言程序设计>课程案例库研究系统系统主要功能模块包括学生用户管理.管题库信息管理.题库练习等,采取面对对象的开发模 ...
- (附源码)Python《C语言程序设计》课程案例库研究 毕业设计030946
Python<C语言程序设计>课程案例库研究系统 摘 要 <C语言程序设计>课程案例库研究系统系统主要功能模块包括学生用户管理.管题库信息管理.题库练习等,采取面对对象的开发模 ...
最新文章
- 对html5的了解,HTML5——对HTML5的认识
- 深蓝学院《从零开始手写VIO》作业一
- 耳前瘘管是否必须切除
- 比tween更有效的tween包.
- 小程序 字号设置 slider滚动改变大小_SteerMouse for mac(鼠标设置工具) v5.4.3
- Java 解析URL
- 用js实现鼠标点击爱心特效
- 用户体验设计答疑对话(半吊子和纯外行
- python编程入门 适合于零基础朋友-Python不能帮你找到女朋友,却能让你成为有钱的单身狗。...
- Redis介绍及常用命令【转载】
- study - 收藏集 - 掘金
- Open Source Drives IOT From Device to Edge
- 【评价模型】数据包络分析法(DEA)
- 计算机课的十个小游戏制作教程,腾讯内容开放平台
- win7局域网共享教程
- ios录音文件路径_苹果6s的录音储存在哪个文件夹
- 小米MIX进入和退出Recovery模式、Fastboot模式各种方法
- 从斗鱼Android开发二面被刷,到VR微创公司收留,我的NDK开发梦究竟缺了什么
- C语言将一个数插入到已排好序的数组中
- AR联机游戏制作过程记录(11.11)