首页 技术 正文
技术 2022年11月9日
0 收藏 617 点赞 4,321 浏览 1660 个字

在上篇文章中,仅仅讲述了如何进行了TCP编程,在本章中,将讲述使用udp进行编码,先看如下的代码,服务器端:

root@python 513]# cat serverudp.py
#!/usr/bin/env pythonfrom socket import *HOST = '192.168.1.60'
PORT = 9999s = socket(AF_INET,SOCK_DGRAM)
s.bind((HOST,PORT))
print '...waiting for message..'
while True:
data,address = s.recvfrom(1024)
print data,address
s.sendto('this is the UDP server',address)
s.close()

在上述的代码中,只要收到了客户端的请求,那么就会返回固定的话,在创建的时候,只要使用SOCK_DGRAM即可创建udp的连接,在设置的时候,只要绑定地址和端口即可。

客户端代码如下:

#!/usr/bin/env pythonfrom socket import *HOST='192.168.1.60'
PORT=9999s = socket(AF_INET,SOCK_DGRAM)
s.connect((HOST,PORT))
while True:
message = raw_input('send message:>>')
s.sendall(message)
data = s.recv(1024)
print data
s.close()

在客户端代码,就是直接连接,然后发送数据,接收数据即可。

具体的tcp和udp的对比如下:

1、 tcp是面向连接的,而udp是无连接,在服务器端的反应就是,tcp需要做很多的设置工作,例如要进行监听listen,然后监听之后,进行接收客户端的连接,也就是accept,当接收到连接之后,传递过来的是客户端的socket对象,然后利用这个socket对象进行发送接收消息。而在udp中,不需要设置这些,只要绑定了地址和端口即可,在接收数据之后,得到客户端的地址和端口,然后服务器端的udp对象将信息发送到对应的地址。

2、在传输数据的方面,tcp是安全的,会将大量的数据进行分块然后进行发送,不会造成数据丢失;而在udp中,发送多少,接收多少就是多少,不会讲数据进行分块,是将数据作为一个包发送,至于客户端能接收到多少数据是不管的

3、tcp在这个时候是阻塞连接的,也就是同时只有一个进行连接,而在udp中,可以进行很多连接,主要就是根据地址来进行返回相关的信息

socket简介:

套接字的主要设计目标是为了进程间的通信,从而就有了地址家族的AF_UNIX,是基于文件型的通信,也称之为IPC,inter process cominication,其实到后来,越来越多用到的是基于网络的套接字,从而就有了地址家族的AF_INET。

而在其中的协议分之为tcp和udp,在tcp中称之为流,也就是SOCK_STREAM,在udp中称之为数据报,也就是SOCK_DGRAM,其实也就是datagram。

一些方法的介绍:

1、 服务端方法

s.bind|()   进行绑定地址和端口

s.listen()  进行监听

s.accept() 监听–返回连接的socket对象和连接的客户端地址

2、 客户端方法

s.connet((address.port))

3、发送数据方法

s.send(string) 主要用在tcp

s.sendall(string) 主要用在tcp

s.sendto(string,address)主要用在udp根据地址发送

4、接收数据方法

s.recv(1024) 主要用在tcp表示接收到1024个字节的数据

s.recvfrom(1024) 主要用在udp,得到参数为数据和地址,从而可以根据地址返回消息

在接收数据的时候,1024称之为缓冲区的数据,然而暂时并不懂啥是缓冲区,暂时保留此问题

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,088
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,565
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,413
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,186
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,822
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905