Python3 TCP Server 服务端 Client 客户端

写在前面的话:每一个实例的代码都会附上相应的代码片或者图片,保证代码完整展示在博客中。最重要的是保证例程的完整性!!!方便自己也方便他人~欢迎大家交流讨论~本文为博主原创文章,未经博主允许不得转载。

server

需要理解的部分我都写在注释中了,不懂的方法一定要去看官方文档哦!顺便还学一下英语orz……

import socket

tcpServerSocket=socket.socket()#创建socket对象
host = socket.gethostname()#获取本地主机名
port=12345#设置端口
tcpServerSocket.bind((host,port))#将地址与套接字绑定,且套接字要求是从未被绑定过的
tcpServerSocket.listen(5)#代办事件中排队等待connect的最大数目
while True:
    #建立客户端连接,接受connection,返回两个参数,c是该connection上可以发送和接收数据的新套接字对象
    #addr是与connection另一端的套接字绑定的地址
    c, addr = tcpServerSocket.accept()       
    print ('连接地址:', addr)
    str='来自服务端的消息!'
    c.send(str)
    #套接字在垃圾收集garbage-collected时会自动close
    #close关闭该connection上的资源但不一定马上断开connection
    #想要立即断开connection,要先调用shutdown再close
    c.close() # 关闭连接

client


import socket               # 导入 socket 模块

tcpClientSocket= socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345                # 设置端口好

tcpClientSocket.connect((host, port))
#该函数返回接收到的数据,数据均以字节表示,参数bufsize表示一次收到的最大的字节数
#使用这个方法好处是如果信号处理器未收到异常或系统请求中断,会重新尝试使系统重新请求而不是直接报错
print( tcpClientSocket.recv(4096))
tcpClientSocket.close()  

执行和修改

打开两个cmd或者anacon prompt
先执行service.py再执行client.py
然后出现了个TypeError!报错了……他要的是bytes而不是字符串,那就把发送的字符串服务器端编码和客户端解码一下
这里写图片描述
这里写图片描述
修改后如下
1service.py.c.send(str.encode())#字符串编码为字节
2.client.pyprint( tcpClientSocket.recv(4096).decode())#字节解码为字符串
再次执行
这里写图片描述
这里写图片描述
然后你发现打印出的连接地址是IPv4 地址形式和端口号,这是在同一台电脑上服务器和客户端,但是写服务器代码的时候绑定的是字符串形式的hostname和端口号。其实两个都是一样的,都是这台电脑的相关属性,可以通过以下代码来验证一下
这里写图片描述

附:&官方文档:18.1. socket — Low-level networking interface — Python 3.5.6 documentation https://docs.python.org/3.5/library/socket.html
&Python 网络编程 | 菜鸟教程 http://www.runoob.com/python/python-socket.html

猜你喜欢

转载自blog.csdn.net/Leo_Huang720/article/details/81608204