在Linux网络编程中,你可以尝试实现一个小的项目,例如一个简单的TCP服务器或客户端,或者一个FTP服务器,或者一个HTTP服务器等。以下是一个简单的TCP服务器和客户端的例子:
服务器端(server.py): ```python import socket
def server(): host = '127.0.0.1' # 本地IP port = 12345 # 端口 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((host, port)) s.listen(1) conn, addr = s.accept() print('连接地址:', addr) while True: data = conn.recv(1024) if not data: break print('接收到的数据:', data) conn.sendall(data) conn.close() s.close()
if __name__ == '__main__': server() ```
客户端(client.py): ```python import socket
def client(): host = '127.0.0.1' # 服务器IP port = 12345 # 端口 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host, port)) while True: msg = input('请输入要发送的消息:') if msg == 'exit': break s.send(msg.encode()) data = s.recv(1024) print('收到的消息:', data.decode()) s.close()
if __name__ == '__main__': client() ``` 这个项目实现了客户端通过TCP连接到服务器,发送和接收数据。你可以根据自己的需求进行扩展,例如添加多线程支持,实现更复杂的协议等。注意,这只是一个基础示例,实际使用时可能需要处理更多的错误情况和细节。
IT大佬推荐!Github上9个轻量级的、超实用的C++项目,建议收藏
阿里开源的C++轻量级异步框架。提供基于C++ 20 无栈协程(Lazy)、有栈协程(Uthread)和Future/Promise等的一部组件,轻松完成C++异步开发的任务,在图形计算引擎、时序数据库,搜索引擎系统等场景中有着广泛应用。
另外一个魔法盒子下挂的PC主机,通过172.16.0.18 IP地址访问samba服务器,通过win+R打开运行,输入\172.16.0.18,点击确认。
linux网络编程的小项目
我的私有云盘采用的是一个树莓派Pi 400,安装的是Debian 12操作系统,插入一个闪迪32G U盘,运行魔法盒子程序后花甲小吃创业小项目摆摊, 系统会生成一个虚拟IP地址:172.16.0.18,注意该地址是一个私有IP地址。
中心设备和魔法盒子使用同一套软件,通过配置文件区分不同的设备类型,中心设备和魔法盒子都运行Linux系统(Ubuntu,Debian)。
魔法盒子是一个非常锻炼Linux网络编程的一个项目,如果你能够从0到1完成该项目,那么恭喜你,你完成有能力胜任Linux网络开发等岗位。
在开始介绍魔法盒子这个项目之前,我先来聊一下为什么要上线这个项目,一切还要从我的知识星球说起,今年我的知识星球需要完成近100篇原创图文文章,3个原创高质量项目,以及2个高质量视频课程,这个目标比较高,需要保持频繁的内容输出。
需要C/C++ Linux服务器开发学习资料私信“资料”(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享
************************************************************************/
/************************************************************************
这时候,我们就需要考虑多任务的互斥或同步问题了,这里通过互斥锁来解决这个问题,确保这个结构体参数值被一个临时变量保存过后,才允许修改。
原因:假如有多个客户端要连接这个服务器,正常的情况下,一个客户端连接对应一个 connfd,相互之间独立不受影响,但是,假如多个客户端同时连接这个服务器一千块的小项目有哪些名称,A 客户端的连接套接字为 connfd,服务器正在用这个 connfd 处理数据,还没有处理完,突然来了一个 B 客户端,accept()之后又生成一个 connfd, 因为是地址传递, A 客户端的连接套接字也变成 B 这个了,这样的话,服务器肯定不能再为 A 客户端服务器了
因为void *是4个字节,而connfd为int类型也是4个字节,故可以传值。如果connfd为char、short,上面传值就会出错
************************************************************************/
/************************************************************************
多线程服务器是对多进程服务器的改进,由于多进程服务器在创建进程时要消耗较大的系统资源,所以用线程来取代进程,这样服务处理程序可以较快的创建。据统计,创建线程与创建进程要快 10100 倍,所以又把线程称为“轻量级”进程。线程与进程不同的是:一个进程内的所有线程共享相同的全局内存、全局变量等信息,这种机制又带来了同步问题。
/* Flags to be ORed into the type parameter of socket and socketpair and
正如大家所想,一般情况下有了 af 和 type 两个参数就可以创建套接字了,操作系统会自动推演出协议类型,除非遇到这样的情况:有两种不同的协议支持同一种地址类型和数据传输类型。如果我们不指明使用哪种协议,操作系统是没办法自动推演的。
早期的socket数据结构,sockaddr数据结构其实已经不用了,但因为Linux当中很多函数以前用的这个数据结构,不好对这些函数进行更改,就保留了sockaddr数据结构,它就扮演着void *差不多的角色,用作地址转换中介。例如bind的函数当中参数类型还是sockaddr*类型,使用时需要进行地址类型转换。
192.168.1.1转换成二进制为11000000 10101000 00000001 00000001,转换为十进制为3,232,235,777,大端存储为00000001 00000001 10101000 11000000,即16,885,952。
专题: 穷农村创业 农村创业0 农村创业班上一篇开封市创业小项目补贴
下一篇返回列表