socket概述:
在很多编程语言中,都使用socket套接字实现网络通信。
socket是对TCP/IP协议的封装,socket本身是一个调用接口(API),方便程序员用socket使用TCP/IP协议簇,实现网络通信。
不同编程语言,使用socket通信的语法有所区别,但基本过程类似。
TCP与UDP协议:
TCP和UDP都隶属于TCP/IP协议簇。
TCP是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。
UDP是一个非连接的协议,在数据传输之前源端和终端不建立连接,当它想传送时就简单地去传输和抓取数据。效率高,速度快,可靠性低。
TCP:
建立客户端和服务器端,先运行服务器端的程序,然后再运行客户端。
客户端:
#客户端:发送消息给服务端
from socket import *
#创建socket对象
#AF_UNIX本机通信 AF_INET(IPV4) AF_INET6(IPV6)
#SOCK_STREAM(TCP) SOCK_DGRAM(UDP)
s=socket(AF_INET,SOCK_STREAM)
#和目标建立连接
s.connect(("localhost",0303))
#发送消息
s.send("你好!服务端!".encode()) #.encode()对字符串进行编码
#关闭socket
s.close()
服务器端:
#服务端:接收客户端消息并显示
from socket import *
#创建socket对象
s=socket(AF_INET,SOCK_STREAM)
#绑定监听端口
s.bind(("localhost",0303))
#监听
s.listen()
#等待消息
conn,adr=s.accept()
#接收信息
msg=conn.recv(1024)
print("--------:",msg.decode())
s.close()
UDP:
服务器端(不需要提前先运行):
#服务端:接收客户端消息并显示
from socket import *
import time
#创建socket对象
s=socket(AF_INET,SOCK_DGRAM)
#绑定端口
s.bind(("localhost",3435))
#接收信息
while 1==1:
msg=s.recv(1024)
print("----:",msg.decode())
s.close()
客户端:
#客户端:发送消息给服务端
from socket import *
#创建socket对象
#AF_UNIX本机通信 AF_INET(IPV4) AF_INET6(IPV6)
#SOCK_STREAM(TCP) SOCK_DGRAM(UDP)
s=socket(AF_INET,SOCK_DGRAM)
#发送信息
while 1==1:
msg=input("---------<<:")
s.sendto(msg.encode(),("localhost",3435))
#关闭socket
s.close()