目录
一、TCP编程
客户端:创建TCP链接时,主动发起连接的叫做客户端
服务端:接收客户端连接
# socket库包含了网络编程的所有东西
import socket
# 1.创建一个socket
# 参数1:指定协议 AF_INET或者AF_INET6
# 参数2:SOCK_STREAM执行使用面向流的TCP协议
sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.建立连接
# 参数:是一个元组,第一个元素为要连接的服务器的IP地址,第二个参数为端口
sk.connect(('www.sina.com', 80))
sk.send(b'GET / HTTP/1.1\r\nHost: www.sina.com.cn\r\nConnection: close\r\n\r\n')
# 等待接收数据
data = []
while True:
# 每次接收1K的数据
tempdata = sk.recv(1024)
if tempdata:
data.append(tempdata)
else:
break
dataStr = (b''.join(data)).decode('utf-8')
# 断开链接
sk.close()
print(dataStr)
二、客户端与服务器之间的数据交互
1、客户端
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('192.168.1.103', 8080)) #填写自己的ip,端口号可自己设置
count = 0
while True:
count += 1
data = input('请输入给服务器发送的数据')
client.send(data.encode('utf-8'))
info = client.recv(1024)
print('服务器说:', info.decode('utf-8'))
2、服务器
import socket
#创建一个socket
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#绑定IP和端口
server.bind(('192.168.1.103',8080)) #填写自己的ip,端口号可自己设置
#监听
server.listen(5)
#等待链接
clientSocket,clientAddress = server.accept()
print('服务器启动成功......')
# print(str(clientSocket),clientAddress)
while True:
data = clientSocket.recv(1024)
print('收到数据:'+data.decode('utf-8'))
sendData = input("输入返回给客户端的数据")
clientSocket.send(sendData.encode('utf-8'))
3、运行效果:
注意先启动服务器再启动客户端
启动服务器
启动客户端
从客户端发送数据给服务器:
服务器接收到客户端发来的消息,并可返回数据给客户端
三、UDP编程
TCP是建立可靠的连接,并且通信双方都可以以流的形式发送数据,相对于
TCP,UDP是面向无连接的协议。使用UDP,不需要建立链接,只需要知道对方的IP地址和端口号,就可以直接发送数据包,但不一定能够到达
虽然UDP传输数据不可靠,但是相对于TCP,速度快,对于要求不高的数据可以使用UDP传输
1、客户端与服务器通信:
服务器:
import socket
udpServer = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
udpServer.bind(('192.168.1.103',8900))
while True:
data,addr = udpServer.recvfrom(1024)
print("客户端说:",data.decode("utf-8"))
客户端
import socket
client= socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while True:
data = input("请输入数据:")
client.sendto(data.encode("utf-8"),('192.168.1.103',8900))
info = client.recv(1024).decode("utf-8")
print("服务器说:",info)