server
import socket
sk=socket.socket() #买手机
# sk.bind('ip','port') 样板
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 避免服务端报错address already in use这个错误需要增加这一行代码
sk.bind(('127.0.0.1',8080)) #绑卡
sk.listen() #监听 等着有人打电话
conn,addr=sk.accept() #接收电话 conn连接,addr地址
ret=conn.recv(1024) #听别人说话 接收客户端的请求并且打印
print(ret)
conn.send(b'he') #和别人说话,必须传一下bytes类型 对客户端说话
conn.close() #挂电话
sk.close() #关机
client
import socket
sk=socket.socket() #买手机
# sk.bind('ip','port')
sk.connect(('127.0.0.1',8080)) #拨别人的号码 必须和服务端的地址和端口一致
sk.send(b'hello') #给服务器发起说话
ret=sk.recv(1024)#接收服务端的请求并且打印
print(ret)
sk.close()
server和client交互中 必须 send和recv一一对应,一边发送一边接收
优化代码
``
##server`
import socket
sk=socket.socket() #买手机
#sk.bind('ip','port') 样板
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sk.bind(('127.0.0.1',8080)) #绑卡
sk.listen() #监听 等着有人打嗲话
conn,addr=sk.accept() #接收电话 conn连接,addr地址
print(addr)
while True:
ret=conn.recv(1024).decode('utf-8') #听别人说话 接收客户端的请求并且打印
if ret=='bye':
break
print(ret)
info=input('<<<<<<')
conn.send(info.encode('utf-8'))``
conn.close() #挂电话
sk.close() `
##client
import socket
sk=socket.socket() #买手机
#sk.bind('ip','port')
sk.connect(('127.0.0.1',8080)) #拨别人的号码 必须和服务端的地址和端口一致
while True:
info=input('<<<<<<')
sk.send(bytes(info.encode('utf-8')) ) #给服务器发起说话
ret=sk.recv(1024)#接收服务端的请求并且打印
print(ret.decode('utf-8'))
if ret=='bye':
sk.send(b'bye')
break
sk.close()
import socket
sk = socket.socket()
# sk.setblocking(False)
# sk.settimeout(5)
sk.bind(('127.0.0.1',9000))
sk.listen()
conn,addr = sk.accept() # 阻塞
conn.send(b'gskjldfgkasdg')
print('getpeername : \n',conn.getpeername()) #连接到当前套接字的远端的地址
print('getsockopt : \n',sk.getsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR)) #返回指定套接字的参数
conn.recv(1024) # 阻塞
# conn.sendall(b'gskjldfgkasdg')
conn.close()
sk.close()