python学习第七周之socket通信

1.两台计算机之间进行通信,两台机器间进行收发数据,如果将发送与接收数据的代码封装起来,写成一个接口,这便是socket;socket主要是用来收发数据的。

所有的网络协议都是基于socket的;网络协议有 HTTP(网页)、smtp(邮件)、dns、ftp、ssh、snmp、icmp ping(网络层,其他在应用层)。

2.两台计算机通信遵守的规则有 TCP\IP(三次握手、四次断开)、  UDP

3.我们现在先实现一下两台计算机简单的通信一次(发送数据的为客户端、接收数据的为服务器端,当然客户端也可以接收数据,服务器端也可以发送数据)

服务器端代码:

#服务器端
import socket  
server=socket.socket()     #定义类型
server.bind(('localhost',6969))  #绑定要监听的端口
server.listen()  #监听

print("准备接收数据")
conn,addr=server.accept()   #等待接收数据
print(conn,addr)   #conn是客户端连接过来而在服务器端为其生成的一个连接实例

print("开始接收数据")
data=conn.recv(1024)
print("recv:",data)   #打印接收的数据
conn.send(data.upper())   #发送数据,将其变为大写

server.close()

 客户端代码:

#客户端
import socket

#声明协议类型
client=socket.socket()#声明socket类型,同时生成socket连接对象
client.connect(('localhost',6969))

client.send(b"hello world")
data=client.recv(1024)
print("recv:",data)

client.close()

 以上代码实现了客户端跟服务器端的一次通信。

4.将以上代码升级一下,让它们能通信多次:

服务器端:

#服务器端
import socket,os
server = socket.socket()
server.bind(('localhost',6969)) #绑定要监听端口
server.listen(5) #监听

print("我要开始等电话了")
while True:
    conn, addr = server.accept()  # 等电话打进来
    # conn就是客户端连过来而在服务器端为其生成的一个连接实例
    print(conn, addr)
    print("电话来了")
    count = 0
    while True:
        data = conn.recv(1024)
        print("recv:",data)
        if not data:
            print("client has lost...")
            break
        conn.send(data.upper())
        count+=1
        if count >10:break

server.close()

 客户端:

#客户端
import socket

#声明协议类型
client = socket.socket() #声明socket类型,同时生成socket连接对象
client.connect(('localhost',6969))

while True:
    msg = input(">>:").strip()
    if len(msg) == 0:continue
    client.send(msg.encode("utf-8"))
    data = client.recv(10240)
    print("recv:",data.decode())

client.close()

 

转载于:https://www.cnblogs.com/wuxiaoru/p/11592179.html

你可能感兴趣的:(python,运维,网络)