python socket编程TCP和UDP

服务器端的socket(TCP)

import sys
import socket

ip_port=('127.0.0.1',9999) #获取IP和端口
sk=socket.socket() #创建一个服务器端的socket对象
sk.bind(ip_port) #socket与IP端口绑定
sk.listen(5) #设定socket为监听状态
print('服务器端的socket进入监听状态...')
conn,addr=sk.accept() #等待客户端连接,conn为连接后的对象,addr为客户端的ip和端口
client_data=conn.recv(1024) #接收客户端的数据,数据量最大为1024字节
print(client_data.decode('utf-8')) #解码收到的数据内容
conn.send('我是服务器端发送的数据'.encode('utf-8')) #向客户端发送数据
conn.close() #关闭连接

客户端的socket(TCP)

import socket

ip_port=('127.0.0.1',9999) #服务器端的ip和端口
sk=socket.socket() #生成socket对象
sk.connect(ip_port) #连接服务器
sk.send('我是客户端发送的数据'.encode('utf-8')) #向服务器端发送数据
server_reply=sk.recv(1024) #接收服务器端的数据,最大不超过1024字节
print(server_reply.decode('utf-8')) #解码收到的数据
sk.close() #关闭连接

服务器端的socket(UDP)

from socket import *
from time import ctime

HOST='' #服务器短的ip,这里不填默认为本机
PORT=1200 #端口号
BUFSIZ=128 #接收数据的最大字节数
ADDR=(HOST,PORT) #将ip和端口放在一起

sk=socket(AF_INET,SOCK_DGRAM) #AF_INET,SOCK_DGRAM表示用UDP协议,用socket.socket()创建的为TCP协议
sk.bind(ADDR) #绑定服务器ip和端口
print('服务器端进入监听状态。。。')
data,addr=sk.recvfrom(BUFSIZ) #接收客户端的数据,data为客户端的数据,addr为客户端的ip端口
print(data.decode('utf-8')) #解码客户端发来的数据
sk.sendto(b'%s %s[%s]' %('这是服务器端发送的数据'.encode('utf-8'),ctime().encode('utf-8'),data),addr)
#'这是服务器端发送的数据'.encode('utf-8') 表示要发的数据,ctime().encode('utf-8') 表示当前时间,data表示收到客户端的数据

sk.close()

客户端的socket(UDP)

from socket import *

HOST='localhost' #服务器端的ip,这里默认为本机ip
PORT=1200 #端口号
BUFSIZ=128 #发送数据的最大字节数
ADDR=(HOST,PORT) #将ip和端口放在一起

sk=socket(AF_INET,SOCK_DGRAM)
data=input('>') #输入要向服务器发送的内容
sk.sendto(data.encode('utf-8'),ADDR) #向服务器发送数据
data,ADDR=sk.recvfrom(BUFSIZ) #接收服务器的数据
print(data.decode('utf-8')) #解析收到的数据
sk.close()
上一篇:网络编程之socketserver模块,hmac加密模块,struct模块


下一篇:TCP/IP协议栈在Linux内核中的运行时序分析