基于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。

Python Socket Programming UDP/TCP的更多相关文章

  1. Python Socket Programming

    本文介绍使用Python进行Socket网络编程,假设读者已经具备了基本的网络编程知识和Python的基本语法知识,本文中的代码如果没有说明则都是运行在Python 3.4下. Python的sock ...

  2. python socket和简单tcp通信实现

    python 服务端和客户端的简单交互 TCP服务端: 1 创建套接字,绑定套接字到本地IP与端口 s = socket.socket(socket.AF_INET,socket.SOCK_STREA ...

  3. 【Windows socket+IP+UDP+TCP】网络基础

    Windows Socket+网络      Winsock是 Windows下套接字标准.          Winsock 编程分为UDP[Windows socket + UDP],TCP[Wi ...

  4. [Python] socket发送UDP广播实现聊天室功能

    一.说明 本文主要使用socket.socket发送UDP广播来实现聊天室功能. 重点难点:理解UDP通讯流程.多线程.UDP广播收发等. 测试环境:Win10\Python3.5. 程序基本流程:创 ...

  5. python socket 编程(TCP与UDP)

    实验环境:python2 一.TCP编程 1.建立TCP服务器 ①创建TCPServer.py文件 ②编写服务器代码 1)创建socket对象,调用socket构造函数 2)绑定ip端口(IP号和端口 ...

  6. 170925_2 Python socket 创建UDP的服务器端和客户端

    [python版本]3.6 UDP服务器端: from socket import * from time import ctime host = '' port = 21567 buf_size = ...

  7. Python socket – network programming tutorial

    原文:https://www.binarytides.com/python-socket-programming-tutorial/ --------------------------------- ...

  8. [Python_7] Python Socket 编程

    0. 说明 Python Socket 编程 1. TCP 协议 [TCP Server] 通过 netstat -ano 查看端口是否开启 # -*-coding:utf-8-*- "&q ...

  9. How To: Perl TCP / UDP Socket Programming using IO::Socket::INET

    http://www.thegeekstuff.com/2010/07/perl-tcp-udp-socket-programming/ In this article, let us discuss ...

随机推荐

  1. 工具系列 | 使用FormData方式上传文件

    服务端代码 /** * 文件上传 */ public function uploadFile() { Log::error('文件上传 : '.json_encode($_FILES)); $dir ...

  2. python windows下安装pip及rarfile

    python之所以被广泛使用,倒不见得是本身语法简单,而是而nodejs/javascript一样把三方库的依赖管理简化了,而不用和java一样非得通过maven管理,而且还得打包后在classpat ...

  3. 信息熵 Information Entropy

    信息熵用于描述信源的不确定度, 即用数学语言描述概率与信息冗余度的关系. C. E. Shannon 在 1948 年发表的论文A Mathematical Theory of Communicati ...

  4. sqlserver存储过程创建和java调用

    创建存储过程 CREATE procedure [dbo].[getdata_monitor_city_hour_hb] ), ) OUT as begin SET @test = '失败'; if ...

  5. CSAGAN的几大重点 - 2

    1.生成器 1)MRU(SketchyGAN) 计算过程为: 与DCGAN[46]和ResNet生成架构的定性和定量比较可以在5.3节中找到.MRU块有两个输入:输入特征图xi和图像I,输出特征图yi ...

  6. 内存自动清理.sql

    --清除存储过程缓存 DBCC FREEPROCCACHE --注:方便记住关键字 FREEPROCCACHE可以拆解成 FREE(割舍,清除) PROC(存储过程关键字简写),CACHE(缓存) - ...

  7. Docker使用 - 容器

    查看容器 命令:docker  ps  [options] options有: -a:查看所有容器,包含不在运行中的(不带-a参数,是只显示运行中的容器) -q:只显示容器ID -s:多加一列来显示总 ...

  8. 【npm permission denied错误】npm ERR! Error: EACCES: permission denied, access

    在命令前加上 sudo sudo npm install --save-dev grunt 不过这样子可能还是不行,你需要这样: sudo npm install --unsafe-perm=true ...

  9. Invoke 和 BeginInvoke 的真正涵义

    BeginInvoke 方法真的是新开一个线程进行异步调用吗? 参考以下代码: public delegate void treeinvoke(); private void UpdateTreeVi ...

  10. ReetrantLock架构源码 --- One

    以下是绅士通过processon画的一个比较简单的架构,模板模式理清楚确实需要一点点时间 Doug Lea牛ban- .- 最近在复习整理知识点,这上面的一些关键方法addWaiter();acqui ...