首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >socket实现客户端和服务端(上)

socket实现客户端和服务端(上)

原创
作者头像
陈不成i
修改2021-06-21 14:22:14
修改2021-06-21 14:22:14
1.3K0
举报
文章被收录于专栏:ops技术分享ops技术分享

一.说明

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

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对象。

  1. #创建服务端套接字
  2. serversocket=socket()
  3. #把地址绑定到套接字
  4. serversocket.bind()
  5. #对连接进行监听
  6. serversocket.listen()
  7. #使用一个while进行循环,并接收客户端的连接
  8. while True:
  9. serverclient=serversocket.accept()
  10. while True:
  11. #接收已发送
  12. serverclient.recv()
  13. serverclient.send()
  14. #关闭客户端套接字
  15. serverclient.close()
  16. #关闭服务端套接字
  17. serversocket.close()

实现功能:通过while实现循环接收客户端发送的数据,并对客户端发送的数据进行显示并返回给客户端数据,返回给客户端的数据信息后加入时间戳。

  1. import socket
  2. import sys
  3. import time
  4. serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  5. host=socket.gethostname()#获取本地主机名
  6. port=9999
  7. #绑定端口号
  8. serversocket.bind((host,port))
  9. #设置最大连接数
  10. serversocket.listen(5)
  11. while True:
  12. print('服务器启动,监听客户端链接')
  13. clientsocket,addr=serversocket.accept()
  14. print('链接地址:%s' % str(addr))
  15. while True:
  16. try:
  17. data=clientsocket.recv(1024)
  18. except Exception:
  19. print('断开的客户端:',addr)
  20. break
  21. print('客户端发送内容:',data.decode('utf-8'))
  22. reply=input('回复:').strip()
  23. if not reply:
  24. break
  25. msg=time.strftime('%Y-%m-%d %X')#获取结构化时间戳
  26. msg1='[%s]:%s'% (msg,reply)
  27. clientsocket.send(msg1.encode('utf-8'))
  28. clientsocket.close()
  29. serversocket.closel()

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.说明
  • 二.服务端
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档