recv

python 实现简单的FTP

佐手、 提交于 2019-12-27 01:58:35
一、开发环境 server端: centos 7 python-3.6.2 客户端: Windows 7 python-3.6.2 pycharm-2018 程序目的: 1、学习使用socketserver实现并发处理多个客户端。    2、了解使用struct解决TCP粘包。 二、程序设计 (本人菜鸟一枚,对于开发规范,接口设计完全不懂,完全是随心所欲,自娱自乐。写博客主要是记录自己学习的点点滴滴,如有不足之处还请见谅。) 1、server端 1.1 目录结构如下: 1.2 目录简介: FTP_SERVER: 程序主目录 app: 程序主逻辑目录,目录下有四个模块: FTPserver.py: FTP Server端启动入口。 login.py: 认证注册模块,用于处理用户注册,登录认证。 dataAnalysis.py: 命令解析模块,负责解析,执行客户端命令。 FileOpertion.py: 负责文件读,写。数据发送,数据接收。 db: 存放user_pwd.db文件,用于存放用户信息(用户名,密码,FTP目录总空间,已使用空间等) lib: 存放公共数据。 1.3 模块中类的继承关系 1.4 执行流程 1.4.1 程序启动文件FTPserver.py,程序启动后进入监听状态。核心代码如下: class MyFtpServer(socketserver

记一次传递文件句柄引发的血案

匆匆过客 提交于 2019-12-26 17:55:06
apue 上讲 Solaris 系统是可以在进程间通过 STREAMS 管道传递文件句柄的。 书上讲道:“在技术上,发送进程实际上向接收进程传送一个指向一打开文件表项的指针,该指针被分配存放在接收进程的第一个可用描述符项中。” 个人非常感兴趣,就写下了下面的两个程序来验证 STREAMS 管道是否支持发送接收文件描述符,且发送方与接收方的描述符是否可能不相同。 spipe_server.c 1 #define MAXLINE 128 2 3 int get_temp_fd () 4 { 5 char fname[128] = "/tmp/outXXXXXX"; 6 int fd = mkstemp (fname); 7 printf ("create temp file %s with fd %d\n", fname, fd); 8 return fd; 9 } 10 11 int main (int argc, char *argv[]) 12 { 13 if (argc < 2) { 14 printf ("usage: spipe_server <spipe_client>\n"); 15 return 0; 16 } 17 18 int n; 19 int fd[2], fd_to_send, fd_to_recv; 20 if (pipe (fd) < 0) { 21

python socket,socketserver,IO多路复用,多线程

只谈情不闲聊 提交于 2019-12-26 00:43:31
socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭) socket和file的区别: file模块是针对某个指定文件进行【打开】【读写】【关闭】 socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】 服务端创建 import socket Socket=socket.socket() Socket.bind(('127.0.0.1',9999,)) Socket.listen(5)#最多5个别 while True: ack,con=Socket.accept()#接受客户端的请求,阻塞请求 ack.sendall(bytes('欢迎致电中国电信',encoding='utf8')) while True: ret_bytes=ack.recv(1024) ret_str=str(ret_bytes,encoding='utf-8') if ret_str=='q': break ack.sendall

linux命令学习之:netstat

六月ゝ 毕业季﹏ 提交于 2019-12-25 04:57:09
  Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等,可让你得知整个Linux系统的网络情况。 命令含义   执行netstat后,其输出结果为: [root@CTU1000094955 ~]# netstat Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 CTU100009495:scp-config 10.156.17.212:50097 ESTABLISHED tcp 0 0 localhost:53020 localhost:mysql ESTABLISHED tcp 0 0 localhost:53022 localhost:mysql ESTABLISHED tcp 0 0 CTU1000094955:ssh 10.148.76.171:49280 ESTABLISHED tcp 0 0 localhost:53021 localhost:mysql ESTABLISHED tcp 0 0 localhost:53019 localhost

进程,线程,GIL,Python多线程,生产者消费者模型都是什么鬼

二次信任 提交于 2019-12-25 04:33:02
在我之前的一篇博文中详细介绍了Python多线程的应用: 进程,线程,GIL,Python多线程,生产者消费者模型都是什么鬼 但是由于GIL的存在,使得python多线程没有充分利用CPU的多核,为了利用多核,我可以采用多进程; 1. 父进程与子进程 wiki上对于父进程与子进程的定义: a)Parent process In Unix-like operating systems , every process except process 0 (the swapper) is created when another process executes the fork() system call . The process that invoked fork is the parent process and the newly created process is the child process . Every process (except process 0) has one parent process, but can have many child processes. In the Linux kernel , in which there is a very slim difference between processes and POSIX

Recv gives Bad file descriptor only sometimes (run the program it works fine, sometimes it does not work)

妖精的绣舞 提交于 2019-12-25 03:36:20
问题 Scenario: I have a client (subscriber) with code that compiles and works, I have the server for said client, I can run it on different bash windows, I have printf's to show what message I'm sending, what does the server get, to see if the client receives the confirmation... Everything. There might be problems in some places of the code but more or less it works because I can send messages and so on (this is all on a local machine). I stop the program running, execute again, and two things can

Python Recv() stalling

我只是一个虾纸丫 提交于 2019-12-25 02:03:45
问题 I'm writing a very basic HTTP client: import socket from socket import * Payload = """GET /test.html HTTP/1.1 Accept: */* Accept-Language: en-us User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) Accept-Encoding: gzip, deflate Proxy-Connection: Keep-Alive Host: example.com Pragma: no-cache """ def SendAndReceive(Host, Payload): s = socket(AF_INET, SOCK_STREAM) s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) s.connect(Host) s.sendall(Payload) tdata=[] while True: data = s

recvfrom: Bad address, sendto: Address family not supported by protocol

[亡魂溺海] 提交于 2019-12-25 00:35:39
问题 i'm trying to implement a little UDP-Server/Client Application in C and got two errors on Server-side: recvfrom: Bad address && sendto: Address family not supported by protocol . I searched for the mistake and googled for answers but, unfortunately, they wasn't really helpfully... maybe i'm casting a parameter in a wrong way and don't get it. I hope you can give me a hint :). #include <unistd.h> #include <ctype.h> #include <sys/socket.h> #include <sys/types.h> #include <arpa/inet.h> #include

python socket.recv/sendall call blocking

╄→гoц情女王★ 提交于 2019-12-24 10:54:52
问题 This post is incorrectly tagged 'send' since I cannot create new tags. I have a very basic question about this simple echo server. Here are some code snippets. client while True: data = raw_input("Enter data: ") mySock.sendall(data) echoedData = mySock.recv(1024) if not echoedData: break print echoedData server while True: print "Waiting for connection" (clientSock, address) = serverSock.accept() print "Entering read loop" while True: print "Waiting for data" data = clientSock.recv(1024) if

TCP/IP的底层队列是如何实现的?

本小妞迷上赌 提交于 2019-12-24 10:06:53
自从上次学习了TCP/IP的拥塞控制算法后,我越发想要更加深入的了解TCP/IP的一些底层原理,搜索了很多网络上的资料,收益颇多。今天就总结一下。 我自己比较了解Java语言,对Java网络编程的理解就止于Netty框架的使用。 Netty 的源码贡献者Norman Maurer对于Netty网络开发有过一句建议,"Never block the event loop, reduce context-swtiching"。也就是尽量不要阻塞IO线程,也尽量减少线程切换。我们今天只关注前半句。 为什么不能阻塞读取网络信息的IO线程呢?这里就要从经典的网络C10K开始理解,服务器如何支持并发1万请求。C10K的根源在于网络的IO模型。Linux 中网络处理都用同步阻塞的方式,也就是每个请求都分配一个进程或者线程,那么要支持1万并发,难道就要使用1万个线程处理请求嘛?这1万个线程的调度、上下文切换乃至它们占用的内存,都会成为瓶颈。解决C10K的通用办法就是使用I/O 多路复用,Netty就是这样。 Netty有负责服务端监听建立连接的线程组(mainReactor)和负责连接读写操作的IO线程组(subReactor),还可以有专门处理业务逻辑的Worker线程组(ThreadPool)。 三者相互独立,这样有很多好处。一是有专门的线程组负责监听和处理网络连接的建立,可以防止TCP