Socket 编程-------TCP 和UDP
程序员文章站
2022-07-11 12:51:44
...
Socket 编程——-TCP、UDP 服务器端和客户端
- TCP协议的3次握手
- HTTP的常用请求方式
- 基于TCP 的Socket 通信的流程图
- TCP 服务器端及 客户端代码块
- UDP服务器端及 客户端代码块
TCP协议的3次握手:
三次握手过程:
1. 建立连接时,客户端发送SYN包到服务器,并进入SYN_SENT状态,等待服务器确认。
2. 服务器收到SYN包,反馈一个SYN+ACK包,进入SYN_RECV状态。
3. 客户端接到服务器的SYN+ACK包,向服务器发送确认包ACK,同时进入ESTABLISHED状态,三次握手完成。
HTTP的常用请求方式:
- GET 从访问地址中获取信息(头和体)
- HEAD 只获取头信息,若使用GET,则无需显式声明使用HAED
- POST 客户端通过POST方法向服务器提交新的数据,服务器必须保证数据完整保存,并不允许出现重复的数据提交。
基于TCP 的Socket 通信的流程图:
TCP代码块
服务器端:
import socket
import datetime
HOST='0.0.0.0'
PORT=3434
s= socket.socket(socket.AF_INET,socket.SOCK_STREAM)#使用ipv4,协议使用TCp
s.bind((HOST,PORT))
s.listen(1)
while True:
conn,addr=s.accept()
print('Client %s connected!'%str(addr))
dt=datetime.datetime.now()
message='Current time is '+str(dt)
conn.send(message.encode())
print('Sent: ',message)
conn.close()
客户端:
import socket
import datetime
HOST='127.0.0.1'
PORT=3434
s= socket.socket(socket.AF_INET,socket.SOCK_STREAM)#使用ipv4,协议使用TCp
s.connect((HOST,PORT))
print('connect %s:%d ok'%((HOST,PORT)))
data=s.recv(1024)
print("received: ",data)
s.close()
UDP代码块
服务器端:
import socket
HOST='0.0.0.0'
PORT=3434
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind((HOST,PORT))
while True:
data,addr=s.recvfrom(1024)
print('Received:%s from %s'%(data,str(addr)))
s.close()
客户端:
import socket
HOST='127.0.0.1'
PORT=3434
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
data="hello UDP!"
s.sendto(data.encode(),(HOST,PORT))
print('Sent:%s to %s :%d'%(data,HOST,PORT ))
s.close()
上一篇: 程序员之路,蛇年快加速!
下一篇: 吃剩的骨头属于什么垃圾?现在告诉你