欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 通信的流程图:

Socket 编程-------TCP 和UDP



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()