基于python的socket通信_基于Python的Socket服务器和客户端通信(Pycharm)

先说一下为什么要发这个随笔:

最近在玩python,通过学习socket,就想试试服务器和客户端的通信。^_^

ip和端口这俩有点东西,一顿乱整摸出点门路,也算是为我下学期的计算机网络打下了铺垫了^_^

情景1:

写了客户端和服务器的代码,先运行的客户端,一直在提示如下图

相信都知道为什么了,服务器还没有先执行,都没有listen,所以出现了这种情况

解决办法:先运行服务器的代码,再跑客户端

情景2:

这种情况是运行了两次服务器代码(眼神不好就不要乱运行!!)

不要默认点运行的第一个按钮,要不总是运行的都是上一次的代码。以后一定注意。

情景3:

说说ip地址,通常客户端连接的是自己机器上的ipv4地址,服务器输入(0.0.0.0)就好了。

Windows下查看在cmd中输入ipconfig

Mac和Linux在终端中输入:ifconfig

最后放两张运行成功的图片

客户端:

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 importsocket2 client =socket.socket()3 client.connect(('10.211.55.31',8000))4

5 whileTrue: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 importsocket2 importthreading3

4 server=socket.socket()5 server.bind(('10.211.55.31',8000))6 server.listen()7

8 defhand1e_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 whileTrue: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 whileTrue: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 #recv方法是阻塞的

29 iftemp_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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值