博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python Socket Programming UDP/TCP
阅读量:5149 次
发布时间:2019-06-13

本文共 2264 字,大约阅读时间需要 7 分钟。

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

UDP 客户端/服务器

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

逻辑:

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

UDP服务器:

from socket import *udp_server_socket = socket(AF_INET, SOCK_DGRAM)udp_server_port = 9600name = 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 = 9600udp_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 = 9700tcp_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 = 9700tcp_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

    类似:

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

    由于TCP是面向连接的,每次在读写的socket对象,不必填入目标主机的地址,只需要直接读写数据即可,因此只能接受一个参数(data)。
    而UDP是无连接,每次需要在发送数据需要时填入目标主机的地址,接受时始终也是两个参数: data和address。

转载于:https://www.cnblogs.com/crb912/p/9060670.html

你可能感兴趣的文章
一月流水账
查看>>
判断字符串在字符串中
查看>>
Linux环境下Redis安装和常见问题的解决
查看>>
HashPump用法
查看>>
cuda基础
查看>>
Vue安装准备工作
查看>>
oracle 创建暂时表
查看>>
201421410014蒋佳奇
查看>>
Xcode5和ObjC新特性
查看>>
LibSVM for Python 使用
查看>>
Centos 7.0 安装Mono 3.4 和 Jexus 5.6
查看>>
CSS属性值currentColor
查看>>
java可重入锁reentrantlock
查看>>
浅谈卷积神经网络及matlab实现
查看>>
解决ajax请求cors跨域问题
查看>>
《收获,不止Oracle》pdf
查看>>
Real-Time Rendering 笔记
查看>>
如何理解HTML结构的语义化
查看>>
Activity之间的跳转:
查看>>
实验四2
查看>>