在开始之前呢,先用一张图表示他们之间的关系

Socket对象方法:
类型 | 函数 | 描述 |
|---|---|---|
服务端 | .bind() | 绑定地址关键字,AF_INET下以元组的形式表示地址。常用bind((host,port)) |
.accept() | 被动接受TCP客户端的连接 | |
客户端 | .connect() | 初始化服务器连接 |
.connect_ex() | 是对connect()函数的扩展,当出错时返回出错码,不报异常 | |
其它函数 | .recv() | 接收数据,数据以字符串的形式返回,bufsize指定接收的最大数据量 |
.send() | 发送数据,将string中的数据发送到连接的套接字,返回值是要发送的字节数量,通常使用.encode()函数对数据进行转码 | |
.senddall() | 发送完整的数据,在返回之前会尝试发送所有数据,成功返回None,失败则抛出异常 | |
.recvfrom() | 与recv()函数类似,不同的是返回值是(data,address),其中data是包含接收数据的字符串,address是发送数据的套接字地址 | |
.sendto() | 发送UDP数据,将数据发送到套接字,形式是(ipaddr,port)的元组 | |
.close() | 关闭套接字 |


使用socket函数来创建一个socket对象,并设置一个socket服务,然后通过bind(hostname,port)函数来指定一个端口,使用socket对象的accept方法,等待客户端的连接,并返回connection对象。
#创建服务端套接字serversocket=socket()#把地址绑定到套接字serversocket.bind()#对连接进行监听serversocket.listen()#使用一个while进行循环,并接收客户端的连接while True: serverclient=serversocket.accept()while True:#接收已发送 serverclient.recv() serverclient.send()#关闭客户端套接字 serverclient.close()#关闭服务端套接字serversocket.close()实现功能:通过while实现循环接收客户端发送的数据,并对客户端发送的数据进行显示并返回给客户端数据,返回给客户端的数据信息后加入时间戳。
import socketimport sysimport timeserversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)host=socket.gethostname()#获取本地主机名port=9999#绑定端口号serversocket.bind((host,port))#设置最大连接数serversocket.listen(5)while True:print('服务器启动,监听客户端链接') clientsocket,addr=serversocket.accept()print('链接地址:%s' % str(addr))while True:try: data=clientsocket.recv(1024)except Exception:print('断开的客户端:',addr)breakprint('客户端发送内容:',data.decode('utf-8')) reply=input('回复:').strip()if not reply:break msg=time.strftime('%Y-%m-%d %X')#获取结构化时间戳 msg1='[%s]:%s'% (msg,reply) clientsocket.send(msg1.encode('utf-8')) clientsocket.close()serversocket.closel()原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。