(1)利用 socket 进行简单的链接
Python 里面的 socket 支持 UDP、TCP、以及进程间的通信,socket 可以把我们想要发送的东西封装起来,发送过去,
- #要成一次通信,至少要有两个人,也就是一个服务端,一个客户端
- #服务端
- '''必须先开启着,等待客户端来进行链接请求,
- 所以自己要先有个地址,也就是IP,也要现有自己的端口,没有端口进不去'''
- import socket
- sk= socket.socket()#创建对象
- sk.bind(('127.0.0.1',9999,))#绑定IP和端口,以一个元组的方式传进去
- sk.listen(5)#在前面链接已经建立的情况下,后面最多让五个人等待
- while True:#让服务器端处于可以永远处于接受客户端请求的状态
- conn,address=sk.accept()
- print(conn,address)
- '''
- 监听端口,等待以及接受客户端的请求,有可能会阻塞,主要功能是建立链接,以及接受客户端信息
- conn相当于双方建立的这个链接,之后互相的通信要依靠这个链接;
- address指的的对方的IP和端口
- '''
下面是客户端代码
- #客户端
- import socket
- obj =socket.socket()
- '''相对于客户端,制定要链接谁就好了
- '''
- obj.connect(('127.0.0.1',9999,))#链接服务端
- obj.close()#链接之后关闭
我们先让服务器端启动,然后再启动客户端,结果如图所示
成功打印出了每次的链接,以及客户端的 IP 以及端口号
(2)基于 socket 实现简单的传送消息
- #服务器端
- import socket
- sk= socket.socket()
- sk.bind(('127.0.0.1',9999,))#绑定IP和端口,以一个元组的方式传进去
- sk.listen(5)#在前面链接已经建立的情况下,后面最多让五个人等待
- while True:#让服务器端处于可以永远处于接受客户端请求的状态
- conn,address=sk.accept()#基于conn这个链接发送东西
- conn.sendall(bytes('终有一天你会成为Python爬虫工程师的',encoding='utf-8'))#Python3要用bytes类型,发送字节
- '''建立一次链接,服务器就发送这个字段'''
- print(conn,address)
然后用是客户端代码
- #客户端
- import socket
- obj =socket.socket()
- '''相对于客户端,制定要链接谁就好了
- '''
- obj.connect(('127.0.0.1',9999,))#链接服务端
- '''
- 客户端去链接服务端,如果服务器端没有返回消息给客户端,则客户端会一直
- 在recv状态,一直等待服务器的消息
- '''
- result1= obj.recv(2014)#表示最多接收1024个字节,超过了下次接收、
- result2= str(result1,encoding='utf-8')
- print(result2)
- obj.close()#链接之后关闭
当启动一次客户端建立一次链接,就会收到消息,结果如图
(3)基于 socket 实现聊天机器人
- #服务器端
- import socket
- sk= socket.socket()
- sk.bind(('127.0.0.1',9999,))#绑定IP和端口,以一个元组的方式传进去
- sk.listen(5)#在前面链接已经建立的情况下,后面最多让五个人等待
- while True:#让服务器端处于可以永远处于接受客户端请求的状态
- conn,address=sk.accept()#基于conn这个链接发送东西
- conn.sendall(bytes('你好,链接已经建立',encoding='utf-8'))#Python3要用bytes类型,发送字节
- # '''建立一次链接,服务器就先发送这个字段'''
- while True:#让通信状态不中断
- ret_bytes = conn.recv(1024)
- ret_str = str(ret_bytes,encoding='utf-8')
- if ret_str =='q':#如果收到q,则终止链接
- break
- conn.sendall(bytes(ret_str+' 已收到该信息',encoding='utf-8'))
- #print(conn,address)
下面是客户端代码
- #客户端
- import socket
- obj =socket.socket()
- '''相对于客户端,制定要链接谁就好了
- '''
- obj.connect(('127.0.0.1',9999,))#链接服务端
- '''
- 客户端去链接服务端,如果服务器端没有返回消息给客户端,则客户端会一直
- 在recv状态,一直等待服务器的消息
- '''
- result1= obj.recv(2014)#表示最多接收1024个字节,超过了下次接收、
- result2= str(result1,encoding='utf-8')
- print(result2)
- while True:
- data = input('请输入你要发送的内容:')
- if data == 'q':
- obj.sendall(bytes(data, encoding='utf-8'))
- print('链接断开')
- break
- else:
- obj.sendall(bytes(data,encoding='utf-8'))
- rec_byte = obj.recv(1024)#发了之后,接收信息
- rec_str = str(rec_byte,encoding='utf-8')
- print(rec_str)
- obj.close()#链接之后关闭
结果如图所示
来源: http://www.bubuko.com/infodetail-1959785.html