首页 > 其他 > 详细

socket套接字

时间:2019-07-16 20:07:06      阅读:74      评论:0      收藏:0      [点我收藏+]

1.socket套接字

存在于传输层与应用层之间的抽象层(从传输层包括传输层以下,都是操作系统帮封装各种head):
1.避免学习各层的接口以及协议的使用,socket已经封装好了所有的接口,直接使用这些接口或者方法即可,使用起来方便,提升开发效率.
2.socket就是一个模块,通过使用学习模块提供的功能,建立客户端与服务端的通信

2.单个客户与服务端通信

服务端:
import socket
phone = socket.socket()   # 创建socket对象
phone.bind(('127.0.0.1',8888))  #绑定ip地址和端口,括号内为本地回环地址
phone.listen(5)  # 监听
conn,addr = phone.accept()   # conn为连接服务端与客户端的管道,addr为端口号
client_data = conn.recv(1024)
print(client_data.decode('utf-8'))
to_client = input('>>>')
conn.send(to_client.encode('utf-8'))
conn.close()
phone.close()
客户端:
import socket
phone = socket.socket()
phone.connect(('127.0.0.1',8888))
to_server = input('>>>').strip()
phone.send(to_server.encode('utf-8'))
server_data = phone.recv(1024)
print(server_data.decode('utf-8'))
phone.close()

3.通信循环

服务端:
import socket
phone = socket.socket()  
phone.bind(('127.0.0.1',8888))  
phone.listen(5) 
conn,addr = phone.accept() 
while 1:
    try:
        client_data = conn.recv(1024)
        if client_data == b'q':
            break
        print(client_data.decode('utf-8'))
        to_client = input('>>>')
        conn.send(to_client.encode('utf-8'))
    except ConnectionResetError:
        break
conn.close()
phone.close()
客户端:
import socket
phone = socket.socket()
phone.connect(('127.0.0.1',8888))
while 1:
    to_server = input('>>>').strip()
    if to_server.upper() == 'Q':
        phone.send('q'.encode('utf-8'))
        break
    phone.send(to_server.encode('utf-8'))
    server_data = phone.recv(1024)
    print(server_data.decode('utf-8'))
phone.close()

4.通信、连接循环

服务端:
import socket
phone = socket.socket()   
phone.bind(('127.0.0.1',8888))  
phone.listen(5)  
while 1:
    conn,addr = phone.accept() 
    while 1:
        try:
            client_data = conn.recv(1024)
            if client_data == b'q':
                break
            print(client_data.decode('utf-8'))
            to_client = input('>>>')
            conn.send(to_client.encode('utf-8'))
        except ConnectionResetError:
            break
conn.close()
phone.close()
客户端:
import socket
phone = socket.socket()
phone.connect(('127.0.0.1',8888))
while 1:
    to_server = input('>>>').strip()
    if to_server.upper() == 'Q':
        phone.send('q'.encode('utf-8'))
        break
    phone.send(to_server.encode('utf-8'))
    server_data = phone.recv(1024)
    print(server_data.decode('utf-8'))
phone.close()

5.执行远端命令

服务端:
import socket
import subprocess
phone = socket.socket()
phone.bind(('127.0.0.1',8848))
phone.listen(5)
conn,addr = phone.accept()
while 1:
    try:
        client_data=conn.recv(1024)
        obj = subprocess.Popen(client_data.decode('utf-8'),
                       shell = True,
                       stdout = subprocess.PIPE,
                       stderr = subprocess.PIPE)
        conn.send(obj.stdout.read()+obj.stderr.read())
    except ConnectionResetError :
        break
conn.close()
phone.close()
客户端:
import socket
phone = socket.socket()
phone.connect(('127.0.0.1',8848))
while 1:
    content = input('输入:')
    if content.upper() == 'Q':
        break
    phone.send(content.encode('utf-8'))
    server_data = phone.recv(1024)
    print(server_data.decode('gbk'))
phone.close()

socket套接字

原文:https://www.cnblogs.com/wxl1025/p/11197074.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!