socket编程

  

1、socket编程流程

原文地址:  

socket编程的总体流程如下图所示。 服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。 
  这里写图片描述

 

一个简单的例子:

服务端:

复制代码
 1 import socket
 2 server = socket.socket()
 3 server.bind(('127.0.0.1',6969)) #绑定要监听的端口
 4 server.listen()#监听
 5 
 6 print("我要开始等电话了")
 7 #conn就是客户端连过来而在服务器端为其生成的一个连接实例
 8 conn,addr = server.accept()#等待电话打来
 9 
10 print("电话来了")
11 
12 data = conn.recv(1024)
13 print("recv:",data)
14 conn.send(data.upper())
15 
16 server.close()
复制代码

客户端:

复制代码
 1 import socket
 2 
 3 client = socket.socket()
 4 client.connect(('127.0.0.1',6969))
 5 
 6 client.send(b"Hello world")
 7 data = client.recv(1204)
 8 print("recv:",data)
 9 
10 client.close()
复制代码

先运行服务端,在运行客户端,结果如下:

复制代码
 1 D:\python35\python.exe D:/python培训/s14/day7/socket_server1.py
 2 我要开始等电话了
 3 电话来了
 4 recv: b'Hello world'
 5 
 6 Process finished with exit code 0
 7 D:\python35\python.exe D:/python培训/s14/day7/socket_client1.py
 8 recv: b'HELLO WORLD'
 9 
10 Process finished with exit code 0
复制代码

将上述代码进行改进:

服务端:

复制代码
 1 import socket
 2 server = socket.socket()
 3 server.bind(('127.0.0.1',6969)) #绑定要监听的端口
 4 server.listen()#监听
 5 
 6 print("我要开始等电话了")
 7 while True:
 8     # conn就是客户端连过来而在服务器端为其生成的一个连接实例
 9     conn, addr = server.accept()  # 等待电话打来
10     print("电话来了")
11     while True:
12         data = conn.recv(1024)
13         print("recv:",data)
14         if not data:
15             print("client has lost....")
16             break
17         conn.send(data.upper())
18 server.close()
复制代码

客户端:

复制代码
 1 import socket
 2 
 3 client = socket.socket()
 4 client.connect(('127.0.0.1',6969))
 5 while True:
 6         msg = input(">>:").strip()
 7         client.send(msg.encode("utf-8"))
 8         data = client.recv(1204)
 9         print("recv:",data.decode())
10 
11 client.close()
复制代码

上述代码改进后可以在客户端断开后,服务端不会进入死循环没如果这个时候有新的客户端进入,可以继续通讯

posted @ 2019-06-21 10:43  杉杉来吃1  阅读(4426)  评论(0)    收藏  举报