最基本的socket实例:
Server端
import socket
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.bind(('127.0.0.1',8080))
phone.listen(2)
print ('Start Server: ')
connect,address = phone.accept()
msg = connect.recv(1024)
print ('客户端发来的消息是:',msg)
connect.send(msg.upper())
connect.close()
phone.close()
Client端
import socket
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(('127.0.0.1',8080))
phone.send('test message!'.encode('utf-8'))
msg = phone.recv(1024)
print ('服务端发来的消息是:',msg)
phone.close()
Server端改进版
# -*-coding:utf-8-*-
__author__ = 'qikang'
import socket
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.bind(('127.0.0.1',8080))
phone.listen(5)
while True:
print ('Start Server: ')
connect,address = phone.accept()
while True:
# try:
msg = connect.recv(1024)
if not msg: break
print ('客户端发来的消息是:',msg)
connect.send(msg.upper())
# except Exception as e:
# break
connect.close()
phone.close()
Client端改进版
# -*-coding:utf-8-*-
__author__ = 'qikang'
import socket
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(('127.0.0.1',8080))
while True:
input_str = input('请输入需要发送的代码:')
phone.send(input_str.encode('utf-8'))
msg = phone.recv(1024)
print ('服务端发来的消息是:',msg)
phone.close()
一个SSH Server和Client示例:

# -*-coding:utf-8-*-
import socket
import subprocess
import struct
from functools import partial
ip_port = ('127.0.0.1',8080)
buffer_size = 1024
back_log = 5
tcp_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 解决ip地址正在使用的问题
tcp_server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
tcp_server.bind(ip_port)
tcp_server.listen(back_log)
print ('Running Server ...')
while True:
connect,address = tcp_server.accept()
print ('New Client: ',connect,address)
while True:
try:
recv_cmd = connect.recv(buffer_size)
print ('客户端发来的命令是:',recv_cmd )
if not recv_cmd:
break
cmd = recv_cmd.decode('utf-8')
cmd_result = subprocess.Popen(cmd,
shell=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
# cmd_result_stdin = cmd_result.stdin.read()
cmd_result_stdout = cmd_result.stdout.read()
cmd_result_stderr = cmd_result.stderr.read()
# .encode('utf-8')
if cmd_result_stderr:
cmd_result_recv = cmd_result_stderr
elif not cmd_result_stdout:
cmd_result_recv = b'None'
else:
cmd_result_recv = cmd_result_stdout
length_data = struct.pack('i',len(cmd_result_recv))
# send length data.
connect.send(length_data)
client_ready = connect.recv(buffer_size)
if client_ready == b'client_ready':
connect.send(cmd_result_recv)
except Exception as e:
break
connect.close()
tcp_server.close()

# -*-coding:utf-8-*-
import socket
import struct
from functools import partial
ip_port = ('127.0.0.1',8080)
buffer_size = 1024
tcp_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcp_client.connect(ip_port)
while True:
input_str = input('请输入需要执行的命令:')
if input_str == 'quit' or input_str == 'q' or input_str == 'exit':
break
if not input_str:
continue
tcp_client.send(input_str.encode('utf-8'))
# recv data length.
data_length_recv = tcp_client.recv(buffer_size)
data_length = struct.unpack('i',data_length_recv)[0]
tcp_client.send(b'client_ready')
recv_size = 0
server_send_data = b''
while data_length > recv_size:
server_send_data += tcp_client.recv(buffer_size)
recv_size = len(server_send_data)
# windows gbk
print (server_send_data.decode('gbk'))
# linux utf-8
# print (server_send_data.decode('utf-8'))
tcp_client.close()
来源:https://www.cnblogs.com/qikang/p/8850554.html
