python网络编程

来源:互联网 发布:php javascript 区别 编辑:程序博客网 时间:2024/05/22 16:53
网络:
要解决那些问题
tcp udp http ftp pop3 smtp 
tcp:可靠,有状态,长连接的协议
   主叫方   被叫方
服务套接字
     客户套接字 ==客户套接字
创建服务套接字




import threading
import socket
# 创建服务套接字
ss=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print("建立服务套接字")
#服务套接字绑定主机绑定端口号
ss.bind(("localhost",9999))
print("绑定端口和主机" )
ss.listen(5)
#接收客户套接字请求
print("开始等待客户的请求")
c=ss.accept()  #线程阻塞
print("某个客户连接到我了")
def myrevc(c):
    while True:
        msg=c.recv(1024)
        print(msg.decode())
threading._start_new_thread(myrevc,(c[0],))
while True:
    msg=input()
    c[0].send(msg.encode())






创建客户套接字


import socket
import threading
#创建客户套接字
c=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#输入要呼叫的服务套接字的ip 和端口
c.connect(("localhost",9999))
#创建一个用来接收信息的函数
def myrevc(c):
    while True:
        msg=c.recv(1024)
        print(msg.decode())
threading._start_new_thread(myrevc,(c,))
#用来发送信息
while True:
    msg=input()
    c.send(msg.encode())
    


使用线程实现多个端口的打开(实现多人信息发送接收)


import socket
import threading
ss=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ss.bind(("0.0.0.0",9999))
ss.listen(10)
msg=None
lock=threading.Lock()
con=threading.Condition(lock)
def server_recv(c,a):
    global msg
    while True:
        str1=c.recv(1024)
        con.acquire()
        msg=str(a)+str1.decode()
        con.notify_all()
        con.release()
def server_send(c,a):
    global msg
    while True:
        con.acquire()
        con.wait()
        con.release()
        c.send(msg.encode())
while True:
    c,a=ss.accept()
    threading._start_new_thread(server_recv,(c,a))
    threading._start_new_thread(server_send,(c,a))