基于UDP/TCP的套接字编程demo

UDP 客户端/服务器

一个简单的基于UDP协议的客户端和服务器应用的进程通信。

逻辑:

客户端会给服务器发送小写的英文字母,服务器接受后,把它转化成大写再返回给客户端,客户端输出这组数字。由于Python3已经明确区分了str类和bytes类,因此发送的是字节。

UDP服务器:

from socket import *

udp_server_socket = socket(AF_INET, SOCK_DGRAM)
udp_server_port = 9600
name = gethostname()
udp_server_socket.bind(('', udp_server_port)) while True:
print('The Sever is ready to receive')
# 这段代码会一直处于阻塞状态,除非收到了响应
message, client_address = udp_server_socket.recvfrom(2048)
print('Client Address:', str(client_address), 'Coming!')
modified_message = message.upper()
udp_server_socket.sendto(modified_message, client_address)

UDP客户端

from socket import *

server_ip = '127.0.0.1'
server_port = 9600 udp_client_socket = socket(AF_INET, SOCK_DGRAM)
message = b'hello'
# 发送给服务器
udp_client_socket.sendto(message, (server_ip, server_port)) # 接受服务器的返回内容
modified_message, sever_address = udp_client_socket.recvfrom(2048)
print(modified_message) udp_client_socket.close()

TCP 客户端/服务器

一个简单的基于TCP协议的客户端和服务器应用的进程通信。

TCP服务器

from socket import *

tcp_server_socket = socket(AF_INET, SOCK_STREAM)
tcp_server_port = 9700 tcp_server_socket.bind(('127.0.0.1', tcp_server_port))
tcp_server_socket.listen(1) while True:
# 等待连接
print('Waiting for connecting!')
# 建立TCP连接
connection_socket, addr = tcp_server_socket.accept()
print('Connected from:', addr)
message = connection_socket.recv(2048)
print('The Sever is ready to receive') upper_message = message.upper()
print(upper_message)
connection_socket.send(upper_message)
connection_socket.close()

TCP客户端

from socket import *

server_ip = '127.0.0.1'
server_port = 9700 tcp_client_socket = socket(AF_INET, SOCK_STREAM)
tcp_client_socket.connect((server_ip, server_port)) message = b'hello'
# 发送给服务器
tcp_client_socket.send(message) # 接受服务器的返回内容
modified_message = tcp_client_socket.recv(2048)
print('Modified Message:', modified_message) tcp_client_socket.close()

小结

在写这个demo的时候,犯了几个小错误:

  1. 在TCP的服务端socket中,我的recv方法不是在连接的connection_socket上操作的,导致了一个错误:Transport endpoint is not connected

    类似:https://stackoverflow.com/questions/35969714/error-transport-endpoint-is-not-connected-python-sockets

  2. 在TCP的客户端socket中,我的recv方法想当然的接受了两个参数,导致错误。 这显示是因为没有区分好TCP和UDP的Socket的不同点。

    由于TCP是面向连接的,每次在读写的socket对象,不必填入目标主机的地址,只需要直接读写数据即可,因此只能接受一个参数(data)。

    而UDP是无连接,每次需要在发送数据需要时填入目标主机的地址,接受时始终也是两个参数: data和address。

最新文章

  1. 浅析JVM内存结构和6大区域(转)举例非常好
  2. 4.nodejs权威指南--TCP和UDP
  3. 不用static,巧用对象.方法调用java中的函数
  4. linux下进度条的编写和实现
  5. Unity原厂讲师大解密
  6. 宏ut_mem_block_t
  7. docfx (一)
  8. Elixir游戏服设计二
  9. CentOS设置系统时间、硬件时间、以及定时校对时间
  10. Python基础_函数2
  11. C语言-学生博客汇总
  12. CRMEB系统开发文档
  13. Python ----pip安装模块提示“unknown or unsupported command install”的解决办法
  14. Java中==和equals的比较
  15. Django——博客项目
  16. 尚学堂java 参考答案 第七章
  17. 代码面试集锦 2 - Google
  18. 关于Dynamics CRM 安装用户权限的说明
  19. html03
  20. JavaScript(jQuery)中的事件委托

热门文章

  1. nc 命令转发bash
  2. docker 镜像制作(jupyter)
  3. 常见 SQL 语句的加锁分析
  4. CentOS7安装Apache2和PHP7
  5. C# selenium 高级
  6. Ubuntu 16.04 Roboware Turtlesim 测试
  7. shell基础知识7-字段分隔符与迭代器
  8. C# COM组的开发以及调用
  9. 将博客转成pdf
  10. Win7下Powershell 由2.0 升级为 5.1