import socket
clim=socket.socket()
clim.connect(("localhost",6969))
while True:
thing=input(">>>>")
clim.send(thing.encode("utf-8"))
date = clim.recv(1024)
print("reac:",date)
clim.close()
import socket
server=socket.socket()
server.bind(("localhost",6968))
server.listen()
while True:
conn,addr=server.accept()
while True:
data=conn.recv(1024)
print(data)
msg=input("跟对方说什么:")
#server.send(msg.encode("utf-8"))#这样写法是错的
conn.send(msg.encode("utf-8"))
# server虽然是服务器对应的socket套接字,但其实际上没有connect任何的端,因而使用server.recv就会出现错误,
# 因为服务器的套接字对象只是listen了指定端口,而连接上可以供使用的套接字是server.accept()以后返回的套接字
# ,这是连接到服务器指定端口的套接字,因而可以用以通信
情况二:传输文件
import socket
clim=socket.socket()
clim.connect(("localhost",6969))
f=open("注册码.txt","wb")
while True:
thing=input(">>>>")
clim.send(thing.encode("utf-8"))
date = clim.recv(1024)
print("reac:",date)
f.write(date)
f.flush()
clim.close()
import socket
import os
server=socket.socket()
server.bind(("localhost",6969))
server.listen()
while True:
conn,addr=server.accept()
while True:
data=conn.recv(1024)
print(data)
#os.popen(data)
f=open("D:BaiduNetdiskDownloadpythonPyCharm2017.X专业版注册码.txt")
#server.send(msg.encode("utf-8"))
data=f.read()
conn.send(data.encode("utf-8"))
情况三:实现对服务器端的系统操作
import socket
client=socket.socket()
client.connect(("localhost",6969))
while True:
thing=input(">>>>")
client.send(thing.encode("utf-8"))
date = client.recv(1024)
print("reac:",date)
clim.close()
import socket
import os
server=socket.socket()
server.bind(("localhost",6969))
server.listen()
while True:
conn,addr=server.accept()
while True:
data=conn.recv(1024)
print(data)
res=os.popen(data)
# os.popen(command[, mode[, bufsize]])执行系统命令,执行结果写到一个临时文件里面,返回值是这个打开的文件对象。mode默认值为r,即默认以只读方式打开文件;
# buffersize默认是系统缓冲区大小(buffer缓冲,此概念适用于磁盘写数据;cache缓存,此概念适用于磁盘读数据)。
#
# 既然返回的是一个文件对象,那么接下来可以理解os.popen().read(),是把这个文件对象中的内容读出来,
# 返回值就是文件中的内容。
conn.send(res)