python学习笔记(二十四) 网络编程

目录

一、TCP编程

二、客户端与服务器之间的数据交互

三、UDP编程


一、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)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值