聚牛网站建设公司,做轮播海报的网站,家居建材网站源码,营销外包公司网络编程(基于TCP协议)
基础(1)
文件名: myprofile.py
iaap (127.0.0.1, 8002)文件名: server.py CS架构(client\server)最基本知识import socket
from myprofile_1 import iaap# 1.创建socket对象(下面两个参数不写默…网络编程(基于TCP协议)
基础(1)
文件名: myprofile.py
iaap (127.0.0.1, 8002)文件名: server.py CS架构(client\server)最基本知识import socket
from myprofile_1 import iaap# 1.创建socket对象(下面两个参数不写默认也是它俩)
server socket.socket(socket.AF_INET, socket.SOCK_STREAM) # socket.SOCK_STREAM 流式协议# 2.绑定地址
server.bind(iaap)# 3.监听连接请求
server.listen(5) # 5 -- 半连接池大小# 4.取出连接请求开始服务
conn, addr server.accept()# 5.数据传输
date conn.recv(1024)
date date.decode(utf-8)
print(date)# 6.结束服务
conn.close()# 7.关闭服务器(可选)
server.close()文件名: client.py CS架构(client\server)最基本知识import socket
from myprofile_1 import iaap# 1.创建socket对象
client socket.socket()# 2.建立连接
client.connect(iaap)# 3.传输数据
msg input(请输入)
client.send(msg.encode(utf-8))# 4.关闭连接(客户端的最后必须是关闭连接,从而释放客户端设备的资源)
client.close() # 所以必须要写这行代码对应的是服务端的conn.close()基础(2)
文件名: myprofile.py
iaap (127.0.0.1, 8004)文件名: server.py CS架构升级--连接循环import socket
import timefrom myprofile_2 import iaap# 基本步骤
sk socket.socket()
sk.bind(iaap)
sk.listen(5) # 半连接池
print(正在等待客户端连接...)# 连接循环
while True:# 获取池中对象conn, addr sk.accept()print(成功连接客户端)# 信息传输while True:# 客户端非正常断开windows报错而mac和Linux不会报错但收到的date为空try:date conn.recv(1024)except:breakif not date:breakconn.send(date.upper())# 连接断开提醒print(正在关闭连接...)time.sleep(1.1)conn.close()print(连接已关闭)# sk.close()文件名: client.py CS架构升级--连接循环import socket
from myprofile_2 import iaap# 基本步骤
sk socket.socket()
sk.connect(iaap)# 信息传输
while True:# 用户输入msg input(请输入).strip()if not msg: # 防止输入为空造成卡空continueif msg Q or msg q: # 正常退出操作break# 发送数据sk.send(msg.encode(utf-8))# 接收数据date sk.recv(1024)print(date.decode(utf-8))# 关闭连接释放资源
sk.close()并发(1)
文件名: myprofile.py
iaap (127.0.0.1, 8010)文件名: server.py 利用 socketserver 实现并发import socketserver
from myprofile_1 import iaapclass RequestHandle(socketserver.BaseRequestHandler):def handle(self):# 打印查看它们是什么print(self.request) # 相当于coonprint(self.client_address)# 数据传输部分while True:# - 客户端非正常断开windows报错而mac和Linux不会报错但收到的date为空try:date self.request.recv(1024)except:breakif not date:break# - 发送信息self.request.send(date.upper())print()# 结束服务self.request.close()# 实例化??
sk socketserver.ThreadingTCPServer(iaap, RequestHandle)
# 调用
sk.serve_forever()文件名: client.py 利用 socketserver 实现并发import socket
from myprofile_1 import iaap# 基本步骤
sk socket.socket()
sk.connect(iaap)# 信息传输
while True:# 信息输入msg input(请输入).strip()if not msg:continueif msg Q or msg q:break# 发送数据sk.send(msg.encode(utf-8))# 接收数据date sk.recv(1024)print(date.decode(utf-8))# 关闭连接释放资源
sk.close()并发(2)
文件名: myprofile.py
iaap (127.0.0.1, 8033)文件名: server.py
使用进程实现并发效果
import socket
from multiprocessing import Process
from myprofile_2 import iaapdef task(conn, addr):# 连接信息提示ip, port addrprint(f成功连接客户端\nIP{ip}\n端口{port})# 通讯循环while True:# 防bugtry:date conn.recv(1024)except:breakif not date:break# 发送消息conn.send(date.upper())# 关闭连接conn.close()if __name__ __main__:# 基本部分sk socket.socket()sk.bind(iaap)sk.listen(5)while True:# 获取连接对象conn, addr sk.accept()# 将连接对象交给子进程操作# 先创建进程对象p Process(targettask, args(conn, addr))# 开始进程p.start()文件名: client.py
使用进程实现并发效果
import socket
from myprofile_2 import iaapsk socket.socket()
sk.connect(iaap)# 通讯循环
while True:# 信息输入msg input(请输入).strip()if not msg:breakif msg q or msg Q:break# 发送信息sk.send(msg.encode(utf-8))# 接收信息date sk.recv(1024)print(date.decode(utf-8))# 断开连接释放资源
sk.close()并发(3)
文件名: myprofile.py
iaap (127.0.0.1, 8001)文件名: server.py 使用线程实现并发效果import socket
from threading import Thread
from myprofile import iaapdef task(conn, addr):# 连接提示ip, port addrprint(f客户端IP:{ip} 端口:{port}\n连接成功\n)# 通讯循环while True:# 接收信息try:date conn.recv(1024)except:breakif not date:break# 发送信息conn.send(date.upper())# 关闭客户端连接print(f客户端IP:{ip} 端口:{port}正在关闭连接...)conn.close()print(连接已断开)if __name__ __main__:# 基本步骤sk socket.socket()sk.bind(iaap)sk.listen(5)# 获取连接对象while True:coon, addr sk.accept()# 创建线程将对象交给线程进行服务t Thread(targettask, args(coon, addr))# 开始线程t.start()文件名: client.py 使用线程实现并发效果
import socket
from myprofile import iaap# 基本步骤
sk socket.socket()
sk.connect(iaap)# 通讯循环
while True:# 信息输入msg input(请输入).strip()if not msg:continueif msg Q or msg q:break# 发送消息sk.send(msg.encode(utf-8))# 接收并打印消息date sk.recv(1024)print(date.decode(utf-8))# 关闭连接释放资源
print(正在关闭连接...)
sk.close()
print(连接已断开)网络编程(基于UDP协议)
基础
文件名: myprofile
iaap (127.0.0.1, 8002)文件名: server udp协议下的套接字udp特点
1.udp传输不可靠
2.udp不需要连接import socket
from myprofile import iaap# 1.创建socket对象
sk socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # socket.SOCK_DGRAM 数据报协议# 2.绑定地址
sk.bind(iaap)# 3.通讯循环
while True:# 接收信息date, addr sk.recvfrom(1024)# 发送信息sk.sendto(date.upper(), addr)# # 4.关闭服务器(可选)
# sk.close()文件名: client udp协议下的套接字udp特点
1.udp传输不可靠
2.udp不需要连接import socket
from myprofile import iaap# 1.创建socket对象
sk socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 2.通讯循环
while True:# 输入数据msg input(请输入).strip() # 发送不了空if not msg:continueif msg q or msg Q:break# 发送数据sk.sendto(msg.encode(utf-8), iaap)# 接收数据date, addr sk.recvfrom(1024)print(date.decode(utf-8))# 3.关闭连接释放资源
print(正在断开连接...)
sk.close()
print(已断开)并发
文件名: myprofile
iaap (127.0.0.1, 8000)文件名: server 利用 socketserver 实现并发import socketserver
import timefrom myprofile import iaapclass RequestHandle(socketserver.BaseRequestHandler):def handle(self):print(f客户端发来的数据{self.request[0]})time.sleep(3)self.request[1].sendto(self.request[0].upper(), self.client_address)# 实例化对象???
sk socketserver.ThreadingUDPServer(iaap, RequestHandle)
# 调用??
sk.serve_forever()文件名: client 利用 socketserver 实现并发
import socket
from myprofile import iaap# 基本部分
sk socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 通讯循环
while True:# 输入信息msg input(请输入).strip()if not msg:continueif msg q or msg Q:break# 发送信息sk.sendto(msg.encode(utf-8), iaap)# 接收信息date, addr sk.recvfrom(1024)print(date.decode(utf-8))# 关闭连接释放资源
sk.close()