python_day27

网络编程

Tcp基本语法:

服务端:

import socket

# 1创建一个TCP/IP socket
sk = socket.socket()

#2 绑定端口: 
'''默认本地ip: 127.0.0.1'''
sk.bind(('127.0.0.1', 9999))

# 3监听端口:
sk.listen()

#4三次握手
conn,addr = sk.accept()

#5收发数据逻辑
res = conn.recv(1024)
print(res.decode())
# 6四次挥手:
conn.close()

#7退还端口
sk.close()

客户端:

##客户端
import socket
#1.创建一个socket对象
sk = socket.socket()
#2.连接服务端
sk.connect(('127.0.0.1',9999))
#3.收发数据
'''发送的数据类型是二进制字节流'''
sk.send('hello'.encode())
#4关闭链接
sk.close()

Tcp循环发送:

服务端:

# ### 服务端
import socket

# (1) 创建socket对象
sk = socket.socket()

# 一个端口绑定多个程序(仅在测试时使用)
sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)

# (2) 在网络中注册该主机(绑定ip和端口号)
sk.bind(  ("127.0.0.1" , 9001)  )
# (3) 监听端口
sk.listen()
# (4) 三次握手
# conn,addr = sk.accept()
# (5) 收发数据的逻辑

"""
print(conn)
print(addr)
<socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9000), raddr=('127.0.0.1', 50176)>
('127.0.0.1', 50176)
"""

while True:
	conn,addr = sk.accept()
	while True:
		# 接受数据
		res = conn.recv(1024)
		print(res.decode())
		
		# 发送数据
		strvar = input("[服务端]请输入您要发送的数据>>>")
		conn.send(strvar.encode())
		
		# 退出
		if strvar == "q":
			break


	# (6) 四次挥手
	conn.close()
	
# (7) 退还端口
sk.close() 



客户端:

# ### 客户端
import socket

# (1) 创建socket对象
sk = socket.socket()
# (2) 连接服务端
sk.connect( ("127.0.0.1" , 9001) )
# (3) 收发数据的逻辑

while True:
	# 发送数据
	strvar = input("[客户端]请输入您要发送的数据>>>")
	sk.send(strvar.encode())
	
	# 接受数据
	res = sk.recv(1024)
	if res == b"q":
		break
	print(res.decode())
# (4) 关闭连接
sk.close()

Udp基本语法:

服务端:

# ### UDP协议 服务端
import socket 

# 1.创建udp对象
sk = socket.socket(type=socket.SOCK_DGRAM)

# 2.在网络中注册该主机(绑定ip和端口号)
sk.bind( ("127.0.0.1",9000) )

# 3.收发数据的逻辑
"""udp协议下,默认第一次只能接收数据(没有三次握手,不清楚对方的ip和端口号)"""
# 接受数据
msg , addr  = sk.recvfrom(1024)
print(msg.decode())
print(addr)

# 发送数据
sk.sendto( "我喜欢你个锤子".encode()  , addr )

# 4.关闭连接
sk.close()

客户端:

# ### UDP协议 客户端
import socket 

# 1.创建udp对象
sk = socket.socket(type=socket.SOCK_DGRAM)

# 2.收发数据的逻辑
# 发送数据
msg = "你喜欢我么~"
# sendto(  二进制字节流 , ip端口号  )
sk.sendto(   msg.encode() ,  ("127.0.0.1",9000) )

# 接受数据
msg , addr = sk.recvfrom(1024)
print(msg.decode())
print(addr)

# 3.关闭连接
sk.close()

Udp循环发送:

服务端:

客户端:

# ### udp 客户端
import socket

sk = socket.socket(type=socket.SOCK_DGRAM)

while True:
	# 发送数据
	strvar = input("[客户端]请输入您要发送的内容>>>")
	sk.sendto( strvar.encode() , ("127.0.0.1",9000) )
	
	# 接受数据
	msg , addr = sk.recvfrom(1024)
	print(msg.decode())
	
sk.close()

粘包:

服务端:

# ### 服务端
import socket
import time
import struct

"""
黏包现象:
	(1)发送端,数据小,时间间隔短,造成黏包
	(2)接收端,没有及时接受数据,可能把多次发送的数据当成一条截取.
"""

sk = socket.socket()
sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sk.bind( ("127.0.0.1",9001) )
sk.listen()
conn,addr = sk.accept()

# 收发数据的逻辑
strvar = input("[服务端]请输入您要发送的数据")
msg = strvar.encode()
length = len(msg)
res = struct.pack("i",length)

# 第一次发送数据 (数据长度)
conn.send(res)

# 第二次发送数据 (真实数据)
conn.send(msg)

# 第三次发送数据 (真实数据)
conn.send(b"world,hello")


conn.close()
sk.close()

客户端:

# ### 客户端
import socket
import time 
import struct

sk = socket.socket()
sk.connect( ("127.0.0.1",9001)  )

time.sleep(2)
# 收发数据的逻辑


# 第一次接受数据 (数据长度)
num = sk.recv(4)
tup = struct.unpack("i",num)
print(tup[0])

# 第二次接受数据 (真实数据)
res = sk.recv(tup[0])
print(res.decode())

# 第三次接受数据 (真实数据)
res = sk.recv(1024)
print(res.decode())

sk.close()

相关推荐

  1. Leetcode--27

    2024-04-15 00:22:02       33 阅读
  2. 面试经典150题(27-28)

    2024-04-15 00:22:02       33 阅读
  3. 周报 | 24.4.22-24.4.28文章汇总

    2024-04-15 00:22:02       13 阅读
  4. 10.27

    2024-04-15 00:22:02       30 阅读
  5. 27. 移除元素

    2024-04-15 00:22:02       37 阅读
  6. day27 回溯(03)

    2024-04-15 00:22:02       47 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-15 00:22:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-15 00:22:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-15 00:22:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-15 00:22:02       18 阅读

热门阅读

  1. 如何做一个自己的开源项目

    2024-04-15 00:22:02       14 阅读
  2. Qt中显示hex数据的控件

    2024-04-15 00:22:02       13 阅读
  3. C++:运算符与表达式 (信奥赛练习)

    2024-04-15 00:22:02       16 阅读
  4. LeetCode 61. 旋转链表

    2024-04-15 00:22:02       11 阅读
  5. Python装饰器

    2024-04-15 00:22:02       14 阅读
  6. Vue EasyUI插件 学习笔记(基础)详细版

    2024-04-15 00:22:02       17 阅读
  7. jQuery学习笔记(2.0)

    2024-04-15 00:22:02       12 阅读
  8. Nginx 基础应用实战 04 在公网配置配置HTTPS

    2024-04-15 00:22:02       15 阅读
  9. 前端npm常用命令总结

    2024-04-15 00:22:02       12 阅读