网络编程.py

学习目标:如何基于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'))


猜你喜欢

转载自blog.csdn.net/hsy_666/article/details/80544961