网络编程.py

匿名 (未验证) 提交于 2019-12-03 00:22:01

学习目标:如何基于socket编程,来开发一款C/S架构(C:client客户端  S:server服务端)软件

网络编程:实现计算机与计算机间的通信

通信协议:

              TCP:可靠,有状态的,长连接的协议,像打电话一样

              UDP:不可靠,无连接,像发短信一样

TCP和UDP属于运输层 

创建TCP Scoket:   s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  

socket主要类型:socket.AF_INET                         服务器之间网络通信

                            socket.SOCK_STREAM             流式socket,for TCP

socket函数:服务器socket函数,客户端socket函数和公共socket函数

服务器socket函数:bind(address)       以元组的形势表示地址

                              listen(backing)      挂起的最大连接数

                              accept()                 接受TCP连接并返回

客户端socket函数:connent(address) 连接到address

                               connent_ex(address)  动能相同,但返回0

 公共socket函数:recv()                       接受TCP数据

                            send()                      发送TCP数据

                            sendall()                  完整发送TCP数据

socket应用及使用步骤(下面的案例是线程和socket结合的案例)

先创建服务端流程

#群聊的客户端 import socket,threading #创建个服务端 server=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #邦定IP和端口 server.bind(('192.168.43.30',8000)) #设置最大挂起连接数 5 server.listen(5) print('服务端启动 等待客户端连接。。。。。') #中间转换数据的变量 message='' #创建一把锁 lock=threading.Lock() Cond=threading.Condition(lock=lock) #不停的收 不停的发 def recv_msg(conn,address):    while True:        msg=conn.recv(1024)        global message        Cond.acquire()        message=str(address)+'>>:'+msg.decode()        print('收到',+message)        Cond.notify_all()        Cond.release() def send_msg(conn,address):     while True:         Cond.acquire()         Cond.wait()         Cond.release()         conn.sendall(message.encode('utf-8'))         print('发送'+message) #为每一个连接者提供收和发的线程 while True:     conn,address=server.accept()     threading._start_new_thread(recv_msg,(conn,address))#不停的收     threading._start_new_thread(send_msg,(conn,address))#不停的发

再创建客户端流程:

import socket,threading #创建客户端 client=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #建立连接 client.connect(('192.168.43.30',8000)) def recv_msg():     while True:         msg=client.recv(1024)         print('收到:',msg.encode) threading._start_new_thread(recv_msg,()) #不停的发 while True:     msg=input('请数据消息:')     client.send(msg.encode('utf-8'))


转载请标明出处:网络编程.py
文章来源: 网络编程.py
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!