学习笔记(05):Python网络编程&并发编程-基于socket实现简单套接字通信

立即学习:https://edu.csdn.net/course/play/24458/296234?utm_source=blogtoedu

1.服务器端

#以打电话通讯为例子进行说明
#导入相应的模块
import socket

#1、设置套接字的类型以及协议(买手机),其实就是设置一个套接字,phone即为一个套接字
#设置为网络类型的套接字:socket.AF_INET
#设置为TCP协议:socket.SOCK_STREAM
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#2、绑定端口以及制定IP地址(绑定手机卡)
#bind(('ip地址',端口))传入的是一个元组
#端口是0-65550,其中0-1024是给操作系统使用的
phone.bind(('127.0.0.1',8080))

#3、监听端口listen()
#表示可挂起的请求的最大数量为5个,如接着一个电话时,另一个电话又打进了,这时候需要将这个电话挂起,等当前的电话结束后再处理后面打进来的这个电话
phone.listen(5)

#4、阻塞,等待客户端的连接accept()
res = phone.accept()

'''(<socket.socket fd=348, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8080), raddr=('127.0.0.1', 65470)>, ('127.0.0.1', 65470))
    res返回了一个元组,含有两个元素,
    第一个元素是套接字对象:<socket.socket fd=348, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8080), raddr=('127.0.0.1', 65470)>,
    第二个是本地地址与端口组成的元素('127.0.0.1', 65470)'''

#5、获得收发消息的套接字
conn,client_addr = res

#6、收发消息

#1)接收客户端的请求信息recv()
data = conn.recv(1024)#1024表示接收的字节最大量是1024bytes
print('这是客户端的请求数据',data)

#2)处理接收的请求后,发送数据send()
#将客户端发送来的小写字母经过大写处理后发送返回给客户端
conn.send(data.upper())

#7、关闭接收消息的套接字
conn.close()

#8、关闭phone套接字
phone.close()

2.客户端

#导入模块
import socket

#1、设置phone套接字
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#2、连接服务器(打电话),本地地址:127.0.0.1
phone.connect(('127.0.0.1',8080))

#3、向服务器发送请求send(),发送的数据不能直接发送字符串,因为要传送到物理层底层,因此需要转换成二进制的bytes类型进行发送,只需:发送的数据.encode('utf-8')即可
phone.send('hello'.encode('utf-8'))

#4、接收服务器返回来的数据recv()
res = phone.recv(1024)#接收小于1024bytes的数据
print('服务器返回来的数据:',res)

#5、关闭套接字phone
phone.close()

注:服务器端含有两个套接字,一个是phone用于绑定、监听端口,等待客户端请求,conn用于接收发送数据;而客户端则是只有一个套接字,phone,用于与服务器端进行通讯

发布了39 篇原创文章 · 获赞 11 · 访问量 429

猜你喜欢

转载自blog.csdn.net/qq_45769063/article/details/104672155
今日推荐