使用SOCK_STREAM方式通信,服务端接收到来自客户端的字符串转换为大写后返回给客户端
str_socket_s.py 服务端代码
#!/usr/bin/env python3 # coding:utf-8 import socket //导入socket模块 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) //构造socket对象,使用ipv4地址和TCP方式通信 s.bind(('192.168.247.100',10086)) //调用bind函数将对象s绑定到元组('192.168.247.100',100086)上 s.listen(1) //监听来自客户端的连接,1表示只接收一个连接 print('Wait for connecting...') (conn,addr) = s.accept() //调用accept函数接受一个来自客户端的连接,返回元组(conn,addr),其中conn也是一个socket对象,用来与客户端通信,addr为元组变量,保存客户端IP和端口。 print('conn = ',conn) print('addr = ',addr) while True: str1 = conn.recv(1024) //conn通过recv函数控制一次接收字节流的大小 str2 = str(str1,encoding = 'utf-8') //将字节流数据转换为字符串 print('I received a string is:',str2) str3 = str2.upper() //通过upper方法将小写转换为大写 conn.send(str3.encode('utf-8')) //最后将字符转转换回字节流发送给客户端 if str2 =='.': break conn.close() //关闭连接 s.close() //释放socket对象
str_socket_c.py 客户端代码
#!/usr/bin/env python3 # coding:utf-8 import socket s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(('192.168.247.100',10086)) //调用connect函数连接服务器 print('I am connecting the server') while True: xx = input('请输入字符串:') //接收字符串 s.send(xx.encode('utf-8')) //将字符串转换为字节流,然后通过socket对象发送给服务端 str1 = s.recv(1024) //控制服务端返回的字节流的接收大小 str2 = str(str1,encoding = 'utf-8') //将服务端返回的字节流转换为字符串 print('The original string is :',xx,'\ttheprocessed string is:',str2) if xx == '.': break s.close()
测试效果:
服务端
[root@localhost ~]# python3 str_socket_s.py Wait for connecting... conn = <socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('192.168.247.100', 10086), raddr=('192.168.247.100', 36738)> addr = ('192.168.247.100', 36738) I received a string is: haha I received a string is: xixi I received a string is: hehe I received a string is: .
客户端
[root@localhost ~]# python3 str_socket_c.py I am connecting the server 请输入字符串:haha The original string is : haha theprocessed string is: HAHA 请输入字符串:xixi The original string is : xixi theprocessed string is: XIXI 请输入字符串:hehe The original string is : hehe theprocessed string is: HEHE 请输入字符串:. The original string is : . theprocessed string is: .
服务端代码:
#!/usr/bin/env python3 # coding:utf-8 import socket import os def sendfile(conn): str1 = conn.recv(1024) filename = str1.decode('utf-8') print('The client requests my file:',filename) if os.path.exists(filename): print('I have %s,begin to download!' % filename) conn.send(b'yes') conn.recv(1024) size = 1024 with open(filename,'rb') as f: while True: data = f.read(size) conn.send(data) if len(data) < size: break print('%s is downloaded successfully!' % filename) else: print('Sorry,I have no %s!' % filename) conn.send(b'no') conn.close() s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind(('192.168.247.100',10086)) s.listen(10) print('Wait for connecting...') while True: (conn,addr) = s.accept() sendfile(conn)
客户端代码:
#!/usr/bin/env python3 # coding:utf-8 import socket s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(('192.168.247.100',10086)) filename = input('请用绝对路径输入想要下载的文件:') print('I want to get the file %s!' %filename) s.send(filename.encode('utf-8')) str1 = s.recv(1024) str2 = str1.decode('utf-8') if str2 == 'no': print('To get the file %s failed!' % filename) else: s.send(b'I am ready!') temp = filename.split('/') myname = 'my_' + temp[len(temp)-1] size = 1024 with open (myname,'wb') as f: while True: data = s.recv(size) f.write(data) if len(data) < size: break print('The downloaded file is %s. ' % myname) s.close()
测试效果
服务端
[root@localhost ~]# ls /tmp test [root@localhost ~]# python3 download_socket_s.py Wait for connecting... The client requests my file: /tmp/test I have /tmp/test,begin to download! /tmp/test is downloaded successfully!
客户端
[root@localhost ~]# ls anaconda-ks.cfg download_socket_s.py network.sh str_socket_c.py download_socket_c.py lzu.html socket01.py str_socket_s.py [root@localhost ~]# python3 download_socket_c.py 请用绝对路径输入想要下载的文件:/tmp/test I want to get the file /tmp/test! The downloaded file is my_test. [root@localhost ~]# ls anaconda-ks.cfg lzu.html socket01.py download_socket_c.py my_test str_socket_c.py download_socket_s.py network.sh str_socket_s.py
代码
#!/usr/bin/env python3 # coding:utf-8 import socket s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.settimeout(0.5)#扫描本机设置较短超时时间 ip = input('请输入要扫描主机的ip:') start = 0 stop = 65535 for port in range(int(start),int(stop)): result = s.connect_ex((ip,port)) if result == 0: print(ip+'上的'+str(port)+'端口是开启的' ) s.close()
测试效果
[root@localhost ~]# python3 port.py 请输入要扫描主机的ip:192.168.247.214 192.168.247.214上的22端口是开启的 192.168.247.214上的23端口是开启的 [root@localhost ~]# ss -anlt State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 [::]:22 [::]:*
服务端代码:
#!/usr/bin/env python3 # coding:utf-8 import socket import psutil def do_cpu(): data = str(psutil.cpu_percent(0)) + '%\n' count = 0 for process in psutil.process_iter(): data = data + process.name() data = data + ',' + str(process.pid) cpu_usage_rate_process = str(process.cpu_percent(0)) + '% ' data = data + ',' +cpu_usage_rate_process + '\n' count+=1 if count == 10: break return data s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) s.bind(('192.168.247.100',10086)) print('Bind UDP on 10086') while True: (info,addr) = s.recvfrom(1024) data = do_cpu() s.sendto(data.encode('utf-8'),addr) print('The client is ',addr) print('Sended CPU data is:',data)
客户端代码:
#!/usr/bin/env python3 # coding:utf-8 import socket s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) s_addr = ('192.168.247.100',10086) s.sendto(b'CPU info',s_addr) (data_b,addr) = s.recvfrom(1024) if addr == s_addr: data_s = data_b.decode('utf-8') data_list = data_s.split('\n') print('CPU usage rate is',data_list[0]) print('Top 10 processes are flowing...') print('% -20s% -5s% -10s' % ('NAME','PID','CPU usage')) data_list = data_list[1:-1] for xx in data_list: yy = xx.split(',') print('% -20s% -5s% -10s' % (yy[0],yy[1],yy[2])) s.close()
测试效果
服务端
[root@localhost ~]# python3 cpu_s.py Bind UDP on 10086 The client is ('192.168.247.100', 40648) Sended CPU data is: 0.2% systemd,1,0.0% kthreadd,2,0.0% rcu_gp,3,0.0% rcu_par_gp,4,0.0% kworker/0:0H-kblockd,6,0.0% mm_percpu_wq,9,0.0% ksoftirqd/0,10,0.0% rcu_sched,11,0.0% migration/0,12,0.0% watchdog/0,13,0.0%
客户端
[root@localhost ~]# python3 cpu_c.py CPU usage rate is 0.2% Top 10 processes are flowing... NAME PID CPU usage systemd 1 0.0% kthreadd 2 0.0% rcu_gp 3 0.0% rcu_par_gp 4 0.0% kworker/0:0H-kblockd6 0.0% mm_percpu_wq 9 0.0% ksoftirqd/0 10 0.0% rcu_sched 11 0.0% migration/0 12 0.0% watchdog/0 13 0.0%