客户端 就是要向 服务端 发数据 所以比较好理解
简单说一下步骤:
看代码:
# 1导包
import socket
# 2初始化套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 3建立链接 要传入链接的服务器ip和port
tcp_socket.connect(('192.168.52.1', 11000))
# 4发数据
tcp_socket.send('哈哈呵呵呵'.encode())
# 5断开
tcp_socket.close()
这里有网络调试助手点击下载 , 用于测试
有了发送数据的客户端,现在创建一个接收信息的服务器
简单来说有六个步骤
下面直接看代码: ↓ (因为ip的问题,测试时把WiFi关掉)
# 导包
import socket
# 2初始化套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 3 服务器绑定ip和port
tcp_socket.bind(('192.168.52.1', 12000))
# 4 设置为被动监听模式 最大并发接收的数量是128
tcp_socket.listen(128)
# 5 等待接收链接请求 接收到一个元组 (客户端的socket对象,(客户端的地址,端口))
client, addr = tcp_socket.accept()
# 接收要用客户端的socket对象接收,因为发的时候就是用他的对象发的
data = client.recv(1024)
# 发送的格式是字节,要解码,decode()默认gbk
print(data.decode())
# 6断开
tcp_socket.close()
先说服务端的,不能只接收一次数据程序就结束了,所以加个循环,一直接受
import socket
# 1初始化套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置地址可以复用,解决了 端口没有及时释放的问题
tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# 2 服务器绑定ip和port
tcp_socket.bind(('192.168.52.1', 12000))
# 3 设置为被动监听模式 最大并发接收的数量是128
tcp_socket.listen(128)
while True:
# 4 等待接收链接请求 接收到一个元组 (客户端的socket对象,(客户端的地址,端口))
client, addr = tcp_socket.accept()
print('client:', client)
print('addr:', addr)
while True:
data = client.recv(1024)
print(data.decode('gbk'))
if not data:
# 如果数据为空 说明客户端关闭了链接 这里的client也就可以关闭
client.close()
break
# 5断开
tcp_socket.close()
说一下 : 服务器接收到的client是 (客户端发过来的:客户端套接字对象) , 那既然是客户用这个套接字对象发送,我们也用这个套接字对象去回复 . 试想一下,如果同时有多个客户端发过来连接请求 , 那我们是和谁连接呢 ? 好比方说 : 小A已经和我的服务器连接了, 那我现在程序向下运行,处理数据 , 此时小B尝试连接肯定连不上了!(服务器已经不接收连接请求了)
这种情况 也是可以解决的的,因为他是对每个发过来的socket(客户端对象)进行处理.(这里就像是很多人打人工客服,他会内部给你分配一个客服和你沟通) 有兴趣可以扩展看一下小案例: TCP 聊天室
客户端用socket对象发送数据 也可以用socket接受数据(因为服务器端接收数据的时候 , 就是用客户端的socket对象接收的呀)
import socket
# 1初始化套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2建立链接 要传入链接的服务器ip和port
tcp_socket.connect(('192.168.52.1', 11000))
while True:
text = input('发送的数据')
# 3发数据
tcp_socket.send(text.encode('gbk'))
# 4接收数据
data = tcp_socket.recv(1024)
print(data.decode('gbk'))
# 5断开
tcp_socket.close()
最后结尾了,说一下TCP 和 UDP 的不同点:
还有一个tcp的小案例 : TCP下载文件 tcp下载文件案例
udp的收发信息 UDP收发信息