python初识socket

C/S架构: Client/Server(客户端与服务器端架构)
B/S架构: Browser/Server(浏览器端与服务器端架构)
无论是C/S或B/S架构,只要进行网络通信,基本都要用socket

事例1

 1 服务端
 2 # 导入socket模块
 3 import socket
 4 
 5 # 创建服务端程序socket对象
 6 server = socket.socket()
 7 
 8 # 给服务端程序设置一个本机IP地址和本机端口号
 9 ip_port = ('192.168.12.42',8002)
10 
11 # 配置本机的IP地址与本机的端口号绑定
12 server.bind(ip_port)
13 
14 # 监听本机的地址和端口(等待请求)
15 server.listen()
16 
17 # 等待建立连接,conn是连接通道,addr是客户端的地址
18 conn,addr = server.accept()
19 
20 # 服务端通过conn连接通道来收发消息,通过recv方法,recv里面的参数是字节(B)
21 from_client_msg = conn.recv(1024)
22 
23 # 打印传递过来的的消息(因为默认接收到的是字节,所以打印的也是字节)
24 print(from_client_msg)
25 
26 # 关闭通道
27 conn.close()
28 # 关闭socket对象
29 server.close()
30 服务端打印结果
31 b'hello'
32 
33 
34 客户端
35 # 导入socket模块
36 import socket
37 
38 # 创建客户端程序socket对象
39 client = socket.socket()
40 
41 # 配置要发数据的服务端IP和端口
42 server_ip_port = ('192.168.12.42',8002)
43 
44 # 连接服务端的应用程序,通过connect方法,参数是服务端的ip地址和端口
45 client.connect(server_ip_port)
46 
47 # 发消息,用的send方法,但是调用者是client的socket对象(默认发送的是字节)
48 client.send(b'hello')
49 
50 # 关闭socket对象
51 client.close()

 事例2

 1 服务端
 2 import socket
 3 server = socket.socket()
 4 ip_port = ('192.168.12.42',8002)
 5 server.bind(ip_port)
 6 server.listen()
 7 conn,addr = server.accept()
 8 from_client_msg = conn.recv(1024)
 9 # 打印客户端发过来的消息
10 print('刘力说:',from_client_msg.decode('utf-8'))
11 
12 #回复消息:通过send方法,参数必须是字节类型的(发给客户端的消息)
13 conn.send('你猜我猜不猜'.encode('utf-8'))
14 conn.close()
15 server.close()
16 
17 
18 客户端
19 import socket
20 client = socket.socket()
21 server_ip_port = ('192.168.12.42',8002)
22 client.connect(server_ip_port)
23 
24 # 可以通俗的理解这就是发送给服务器端的消息
25 client.send('猜猜我是谁'.encode('utf-8'))
26 
27 # 可以通俗的理解这就是接收服务器端返回给客服端的消息
28 from_server_msg = client.recv(1024)
29 print('王萌说:',from_server_msg.decode('utf-8'))
30 client.close()

事例3

 1 服务端
 2 import socket
 3 server = socket.socket()
 4 ip_port = ('192.168.12.42', 8002)
 5 server.bind(ip_port)
 6 server.listen()
 7 conn,addr = server.accept()
 8 while 1:
 9     from_client_msg = conn.recv(1024)
10     
11     # 打印客户端发送过来的消息
12     print('刘力说:',from_client_msg.decode('utf-8'))
13     
14     # 判断如果客户端输入的是bye就退出
15     if from_client_msg.decode('utf-8') == 'bye':
16         break
17     
18     # 给客户端发送的的消息
19     to_clinet_msg = input('王萌说:')
20     conn.send(to_clinet_msg.encode('utf-8'))
21     
22     # 判断如果服务器端输入的是bye就退出
23     if to_clinet_msg.upper() == 'bye':
24         break
25 conn.close()
26 server.close()
27 
28 
29 客户端
30 import socket
31 client = socket.socket()
32 server_ip_port = ('192.168.12.42', 8002)
33 client.connect(server_ip_port)
34 while 1:
35     # 给服务器端发送的消息
36     to_server_msg = input('刘力说:')
37     client.send(to_server_msg.encode('utf-8'))
38     
39     # 判断如果客户端输入的是bye就退出
40     if to_server_msg.upper() == 'bye':
41         break
42     
43     # 接收服务端返回的消息并打印
44     from_server_msg = client.recv(1024)
45     print('王萌说:',from_server_msg.decode('utf-8'))
46     
47     # 如果服务器端返回bye,就退出
48     if from_server_msg.decode('utf-8') == 'bye':
49         break
50 client.close()

注意: 先运行server,然后再运行client,然后你会发现client这个文件再输出台的地方让你输入内容,你输入一个内容然后回车,你会发现server那边的控制台就输出了以client发送的内容
事例4

 1 每隔5s把时间戳时间转换为格式化时间
 2 服务端
 3 import socket,time
 4 server = socket.socket()
 5 ip_port = ('192.168.12.42', 8002)
 6 server.bind(ip_port)
 7 server.listen()
 8 conn,addr = server.accept()
 9 while 1:
10     # 接收客户端发送来的字节,然后打印,解码decode
11     from_client_msg = conn.recv(1024)
12     print(from_client_msg.decode('utf-8'))
13     
14     # 发送给客户端的消息,因为发送的必须是字符,所以必须转码encode
15     conn.send(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(float(from_client_msg.decode('utf-8')))).encode('utf-8'))
16 
17 
18 客户端
19 import socket,time
20 client = socket.socket()
21 server_ip_port = ('192.168.12.42', 8002)
22 client.connect(server_ip_port)
23 while 1:
24     # 发送给服务器端的时间(因为传递的必须是字节,所以必须转码encode)
25     to_server_msg = time.time()
26     client.send(str(to_server_msg).encode('utf-8'))
27 
28     # 接收服务器端返回的格式化时间(因为接收过来的是字节,所以必须解码decode)
29     from_server_msg = client.recv(1024)
30     print(from_server_msg.decode('utf-8'))
31     time.sleep(5)

猜你喜欢

转载自www.cnblogs.com/linuxcbb/p/10208709.html