服务端
套接字(socket)本质上就是个接口,封装了TCP,UDP,提供了发送接收的功能。大大简化了我们开发程序的难度。
第一步 创建socket
import socket
sever = socket.socket(
family=socket.AF_INET,
type=socket.SOCK_STREAM #TCP
#type=socket.SOCK_DGRAM 代表了UDP
)
AF_INET:表示使用TCP/IPv4版本的协议,(另外有一种是v6的,通常是v4)。
当然,socket默认是用TCP的,所以上面的代码可以直接写成
sever = socket.socket()
第二步 绑定ip和端口
sever = socket.socket()
sever.bind(('',6969))
通过socket的bind((‘ip地址’,端口号))来绑定。注意接收的是个元组,元组的第一位是ip地址。
ip地址可以填:
- 127.0.0.1 代表只监听本地。
- 局域网ip,只要在局域网内的其他电脑都可以访问。
- ‘ ’或者0.0.0.0 ,所有网卡都可以来访问。
元组后一位是端口号。 端口号范围是0~65536,一般使用1000以后的端口。
第三步 监听
sever.listen(backlog=)
listen(backlog)的参数表示最多服务的用户数。
第四步 等待接收
conn,addr = sever.accept()
注意这个方法执行后会堵塞,后面的方法无法执行,因为它在等待接收消息。其中 conn是客户端连接后,accept方法会返回的一个与连接客户端互发数据的一个socket对象,addr是对应的地址。
第五步 收发数据
data = conn.recv(1024)
print(data.decode('utf-8'))
recv()中的数字是最大容量,一般取1024。
由于接收的是二进制的数据信息,需要解码成正常数据,通过decode(‘utf-8’)方法。
第六步 关闭套接字
conn.close()
注意必须关闭,如果不关闭,则再次执行时,会显示该端口被占用,需要等待一段时间由系统释放。客户端也是如此。
客户端
创建方式和服务端没有太大区别。区别在于客户端是要连接服务端
client=socket.socket()
client.connect(('127.0.0.1',6969))
data=input('>>:')
client.send(data.encode())
client.close()
通过socket的connect((‘ip地址’,端口号)),注意这里的ip地址和端口号是对应的。
其中 发送数据是通过send()的方法,括号里就是发送的内容,由于网络传输的数据都是byte型,所以要把传输的数据编码成二进制,即通过encode()方法。
eg:
注意,文件名不要取关键字!
服务端:
import socket
sever = socket.socket()
sever.bind(('',6969))
sever.listen()
conn,addr = sever.accept()
print('有连接进来了,地址是%s'%addr[0])
data = conn.recv(1024)
print(data.decode('utf-8'))
conn.close()
客户端
import socket
client=socket.socket()
client.connect(('127.0.0.1',6969))
data=input('>>:')
client.send(data.encode())
client.close()
注意应先执行服务端,再执行客户端
最终结果:
服务端
客户端