最近在玩python,通过学习socket,就想试试服务器和客户端的通信。^_^
ip和端口这俩有点东西,一顿乱整摸出点门路,也算是为我下学期的计算机网络打下了铺垫了^_^
情景1:
写了客户端和服务器的代码,先运行的客户端,一直在提示如下图
出现这种情况具体是因为,服务器还没有先执行,都没有listen(监听端口),所以出现了这种情况。
解决办法:先运行服务器的代码,再跑客户端
情景2:
这种情况是运行了两次服务器代码,多次占用一个端口号,而Python只有一个端口号(眼神不好就不要乱运行!!)
不要默认点运行的第一个按钮,要不总是运行的都是上一次的代码。以后一定注意。
情景3:
说说ip地址,通常客户端连接的是自己机器上的ipv4地址,服务器输入(0.0.0.0)就好了。
Windows下查看在cmd中输入ipconfig
Mac和Linux在终端中输入:ifconfig
最后放两张运行成功的图片
最后:
上代码:
客户端:
1 2 3 4 5
| import socket client = socket.socket() client.connect(('10.211.55.31',8000)) client.send("bobby".encode("utf8")) client.close
|
服务器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| 客户端:
import socket client = socket.socket() client.connect(('10.211.55.31',8000)) client.send("bobby".encode("utf8")) client.close 服务器:
import socket server= socket.socket() server.bind(('10.211.55.31',8000)) server.listen() sock, addr = server.accept() data = "" while True: temp_data = sock.recv(1024) print(temp_data) if temp_data: data += temp_data.decode("utf8") if temp_data.decode("utf8").endswith("#"): break; else: break; print(data) sock.close
|
后来改进的代码:
客户端
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 1 import socket 2 client = socket.socket() 3 client.connect(('10.211.55.31',8000)) 4 5 while True: 6 input_data = input() 7 client.send(input_data.encode("utf8")) 8 server_data = client.recv(1024) 9 print("服务器响应:{}".format(server_data.decode("utf8"))) 10 server_data2 = client.recv(1024) 11 print("服务器响应:{}".format(server_data2.decode("utf8"))) 12 client.close
复制代码
|
服务器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| import socket 2 import threading 3 4 server= socket.socket() 5 server.bind(('10.211.55.31',8000)) 6 server.listen() 7 8 def hand1e_sock(sock,addr): 9 temp_data = sock.recv(1024) 10 print(temp_data.decode("utf8")) 11 input_data = input() 12 sock.send(input_data.encode("utf8")) 13 14 while True: 15 16 sock, addr = server.accept() 17 18 client_thread = threading.Thread(target=hand1e_sock,args=(sock,addr)) 19 client_thread .start() 20 21 data = "" 22 while True: 23 sock.send("welcome to server".encode("utf8")) 24 temp_data = sock.recv(1024) 25 print(temp_data.decode("utf8")) 26 input_data = input() 27 sock.send(input_data.encode("utf8")) 28 29 if temp_data: 30 data += temp_data.decode("utf8") 31 if temp_data.decode("utf8").endswith("#"): 32 break; 33 else: 34 break; 35 print(data) 36 sock.close
复制代码
|
总结与反思:
1,本机的ip环路地址通常可以设成127.0.0.1 或者是 0.0.0.0 或者是localhost,如果装有虚拟机的话,虚拟机会再创建一个ip地址。根据实际情况来看,0.0.0.0不是很常用,并且在cmd中ping的话也是不能用的,貌似只有在Python中才能起作用,具体情况还需要具体分析。
2,启动pycharm,假如有import scrapy,类似的包导入错误原因有如下两点。
1,没有安装scrapy,解决:在cmd中输入pip install scrapy
2,Python的虚拟运行环境没有更换。或者虚拟环境配置错误。 解决:点击pycharm – file – settings – 输入interpreter,更换虚拟环境。
z