python之套接字

服务端

套接字(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()

注意应先执行服务端,再执行客户端

最终结果:
服务端
在这里插入图片描述
客户端
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值