简单的socket网络通信的实现p1

Socket 网络编程
Osi 七层协议

Tcp -ip 协议三次握手,4次断开主流协议是tcp
Udp 流媒体

发送端
Import socket
Socket.TCP/IP
Connect(a.ip,a.port)
Socket.send(hello)
Socket.recv()
Socket.close

接收端
Socket.TCP/IP 协议类型叫做地址簇例如ipv4,ipv6
Listen(0,0,0,6969)
Waiting()
Recv()
Send

Socket_RAM #原始套接字 用户可以通过这个来构造ip头
ddos 攻击通过大批的机器的发请求导致你的服务没办法承载。大部分机器都是伪造的,通过tcp/ip的小bug,因为根据三次握手原则你可以伪造假的IP地址访问目标机器,因为是伪造的ip地址所以第三次握手无法进行,而目标机器会给它一个超时时间,一直等着伪造的IP回传消息,所以这个端口一直被挂起,那个端口变成syn_recve.机器就崩溃了。

实现简单的socket通信案例
客户端本地通过发送小写字符,客户端收到大写字符

服务器端代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#  Author: Diedline
import socket
"""
服务器端
"""
Server = socket.socket()
Server.bind(("localhost",6969)) #绑定要监听的端口
Server.listen() #监听
print("我要开始等电话了")
conn,addr =Server.accept()
"""
#等电话打进来 conn 就是客户端连过来而在服务器端生成的连接实例
"""
print(conn,addr)
print("电话来了")
data = conn.recv(1024)
print("recv:",data)
conn.send(data.upper())

Server.close()

客户端代码

1
2
3
4
5
6
7
8
9
10
11
12
#  Author: Diedline
import socket
"""
客户端
"""
client = socket.socket() #声明socket类型,同时生成socket连接对象
client.connect(("localhost",6969))

client.send(b"hello,world!")
data = client.recv(1024)
print("recv:",data)
client.close()

实现单人不间断通信,多人可以挂起等待前一个用户结束后通信

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#  Author: Diedline
import socket
"""
客户端
"""
client = socket.socket() #声明socket类型,同时生成socket连接对象
client.connect(("localhost",6969))
while True:
msg = input("请输入:").strip()
if msg =="":continue
client.send(msg.encode("utf-8")) #所有数据类型都要变成byte类型
data = client.recv(1024) #官方建议不要超过8192即8K
print(data)
client.close()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#  Author: Diedline
import socket
"""
服务器端
"""
Server = socket.socket()
Server.bind(("localhost",6969)) #绑定要监听的端口
Server.listen(5) #监听 里面数字是最大允许挂起链接
"""
监听 里面数字是最大允许挂起链接 在异步才能检测出来
"""
print("我要开始等电话了")
while True:
conn, addr = Server.accept()
print(conn,addr)
print("电话来了")
while True:

"""
#等电话打进来 conn 就是客户端连过来而在服务器端生成的连接实例
"""

data = conn.recv(1024) #官方8192 recv是默认阻塞的
print("recv:",data.decode())
"""
客户端一断开就会陷入死循环,recv变成空数据
"""
conn.send(data)
if not data: #判断是否输入为空
print("client has lost")
break
"""
break 之后又回到上层接受新链接 ,同时只能服务一个
"""

Server.close()