版权声明:转载请注明出处 https://blog.csdn.net/qq_42019406/article/details/81772252
socket :网络编程
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力, 通讯的多有底层都是socket。
编写socket一定要注意客户端和服务器端分开写,写在一个脚本中不能成功。
下面附上代码,先来TCP协议的服务器端和客户端
####server端
import socket ###TCP
###创建一个套接字,用来处理接收和发送
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
## AF_INET指的是ipv4协议 SOCK_STREAM指的是TCP协议
### 绑定ip和端口
s.bind(('192.168.0.77',3000)) ##bind 只接收一个元素,必须是元祖
### 监听
s.listen(3) ##数字,指的是最大挂起数
### 接收
while True:
clelnt,addr = s.accept() ## 接收请求
print(clelnt,addr)
### clelnt存放的是连接信息,addr中存放着客户端的ip和端口号
reg=clelnt.recv(1024) ## 接收数据,最大一次性接收1024字节
print(reg)
print(reg.decode('utf-8'))
msg=input('>>>>>>>>>:')
clelnt.send(msg.encode('utf-8'))
客户端
##### client 客户端 TCP
import socket
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
##连接服务器
sock.connect(('192.168.0.77',3000)) ## 接收元祖
msg=input('>>>>>>>>')
sock.send(msg.encode('utf-8'))
reg=sock.recv(1024)
print(reg.decode('utf-8'))
sock.close()
当我们学会了编写基于TCP协议的socket,那UDP 的服务端和客户端就不会自通了。
#### server UDP
import socket
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(('192.168.0.77',30000))
while True:
conn,addr = s.recvfrom(1024) ## 接收
print(conn.decode('utf-8'))
msg='中国'
s.sendto(msg.encode('utf-8'),addr) ## 发送
#### 客户端
import socket
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
data='你好'
addrs=('192.168.0.77',30000)
s.sendto(data.encode('utf-8'),addrs)
conn=s.recv(1024)
print(conn.decode('utf-8'))