python库中的程序示例如下:
服务器端代码:
# Echo server program
import socket
HOST = '' # Symbolic name meaning all available interfaces
PORT = 50007 # Arbitrary non-privileged port
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024)
if not data: break
conn.sendall(data)
客户端代码:
# Echo client program
import socket
HOST = 'daring.cwi.nl' # The remote host
PORT = 50007 # The same port as used by the server
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b'Hello, world')
data = s.recv(1024)
print('Received', repr(data))
不知道是我题意理解错误还是咋回事,感觉想让示例里的代码运行起来太简单, 就是把client里的HOST的值改为‘127.0.0.1’不就可以了吗?即服务器端的代码不变,客户端代码修改如下:
# Echo client program
import socket
HOST = '127.0.0.1' # The remote host
PORT = 50007 # The same port as used by the server
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b'Hello, world')
data = s.recv(1024)
print('Received', repr(data))
为了能提升自己的水平,还是再进一步,实现返回时间、识别os、ls的命令的功能。
服务器端代码如下:
# Echo server program
import socket
import os
import time
HOST = '' # Symbolic name meaning all available interfaces
PORT = 50007 # Arbitrary non-privileged port
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024)
if data.decode('utf-8') == 'os':
'''当客户端发来os命令时,向客户端发送当前时间以及os的名称'''
os_name = os.name
conn.send((time.ctime()+' '+os_name).encode('utf-8'))
if data.decode('utf-8') == 'ls':
'''当客户端发来ls命令时,向客户端发送当前目录下的文件'''
curdir_name = os.listdir()
conn.send((time.ctime()+' '+str(curdir_name)).encode('utf-8'))
if not data: break
'''当客户端发来的既不是os,也不是ls命令时,向客户端发送当前时间'''
conn.send(time.ctime().encode('utf-8'))
客户端代码如下:
# Echo client program
import socket
HOST = '127.0.0.1' # The remote host
PORT = 50007 # The same port as used by the server
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
data = input('>')
s.sendall(data.encode('utf-8'))
data = s.recv(1024)
print('Received', data.decode('utf-8'))