linux网络编程的小项目

0 去试试创业网

在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   农村创业班